Springboot最小系统的设计与实现

2021-03-22 02:53江健锋徐振平
电脑知识与技术 2021年4期
关键词:全局架构框架

江健锋 徐振平

摘要:Springboot是在Spring基础上衍生的实用性框架,其目的并不是要替代Spring,而是为了改变Spring框架中烦琐的配置项而诞生。其特点是更好地和第三方库结合进行开发,减少大量的配置代码,达到开箱即用的目的。而Springboot的最小系统架构,是在web开发环境中,把安全验证、数据交互、错误返回等web程序基本要素结合成一个架构系统,不随业务内容改变。而当项目业务内容发生改变时,只需要在该最小系统的基础上,实现业务逻辑即可。

关键词:Java;Springboot;Mybatis;SpringSecurity;Json

中图分类号:TP311文献标识码:A

文章编号:1009-3044(2021)04-0062-02

1引言

作为Apache基金的顶级项目,Springboot框架的提出是为了解决传统Spring框架配置烦琐的问题,而且配备了一系列诸如SQL、NoSQL数据库、分布式系统等开源项目作为扩展项,堪称全家桶,是现在绝大多数互联网单系统或分布式系统的必备框架。而传统的基于Springboot框架的系统只是对Spring全家桶按需使用,没有明确规划,在后期会造成项目的结构混乱,例如:返回数据不统一造成前后端联调复杂;缺乏全局错误处理,错误日志复杂,定位问题变得困难。所以,为了排除不同项目业务对系统造成的差异性,我们可以构建最小系统框架,方便项目的拓建,并且给团队一个适应的编程规范。

2系统架构描述

2.1最小系统架构

如图1,绝大多数系统架构核心必须包含三大模块,与用户相关的业务模块;连接底层的数据管理模块;以及用于中间协调系统的基础功能模块;就企业级而非个人的项目来说,除了业务模块不一样之外,基础模块在逻辑功能上是共通的。最小系统架构,其实就是构建系统的安全功能,数据交互封装,全局异常处理,数据库连接等模块功能,同时避免受业务逻辑的干扰,成为脱离业務单独运行的系统。下文将对系统的三个模块进行剖析。

2.2系统采用技术

2.2.1基础功能模块

如图2所示,对于基础功能模块来说,有三个功能是不可或缺的,分别是安全验证,前后端数据交互,异常处理,下文将对这个功能逐一说明。

1)全局异常处理

众所周知,用户的输入不可能完全按照程序员的意愿来进行;同时,程序员无法对程序运行的各种情况考虑的面面俱到,因此,运行时出现异常或者错误是很难避免的。如果把程序内部响应的错误直接返回给用户,会给用户造成疑惑。综上,我们应该对程序所有可能发生的错误都进行捕捉,把错误信息封装,挑选用户能理解的部分进行返回,提高用户体验度,全局异常处理就显得十分重要。

全局异常处理应用的是SpringMVC提供的组件增强注解@ControllerAdvice,以及捕捉系统异常的注解@ExceptionHandler来进行全局声明,对于不同的类型,可以返回不同的消息。对应部分代码如下:

@ControllerAdvice

@Slf4j

publicclassGlobalExceptionHandler {

// 捕获运行时异常

@ExceptionHandler(RuntimeException.class)

@ResponseBody

publicJsonResulthandlerBusinessException(RuntimeException ex) {

log.error("错误: {}"ex.getErrMsg());

ex.printStackTrace();

returnJsonResult.failure(ex);

}

}

2)前后端数据封装

JSON(JavaScript Object Notation)是一种广泛应用的数据交换格式,其简洁而又清晰的层次结构让其逐渐取代XML称为前后端格式交互的主要格式[1]。在Springboot的核心jar包spring-boot-starter-web中,默认封装了JSON工具包,当前端对后台进行请求的时候,可以设置返回的文本格式为JSON。但是JSON简单清晰的特点只体现在数据传输方面,Springboot框架并没有对返回的数据内容格式上做任何要求,即返回的JSON中,可以是一串文字,也可以是某种层次结构。

根据计算机网络传输的知识,我们知道,当系统正常运转并返回时,计算机状态码为200;服务器内部执行错误状态码会返回5xx来代表不同的错误状态。我们可以结合全局异常处理的内容,不管用户传输给我们的数据是什么,只要程序能够接收,http携带的状态码都返回200,我们可以把程序的错误或者程序员自定义的错误内容封装到JSON中,所以我们必须有一个代表状态码的code字段和中文解析message字段。除了错误返回之外,程序必须能够正常执行并返回数据,返回数据的数据是一个对象,我们用data字段来表示。最终,前后端通用的JSON文本格式为。

{

code:状态码(数字),

msg:中文解析(字符串),

data:程序返回的数据(对象)

}

3)安全模块

本文使用的安全模块采用的是SpringSecurity框架,SpringSecurity是一款企业级的权限认证授权框架,作为Spring全家桶的一员,和Springboot具有很好的契合性。同时,安全模型的结构设计采用RBAC(Role-Based Access Control 基于角色的访问控制)模型设计。文献2通过提出一致性准则、安全性准则和可用性准则分别证明了RBAC模型安全特性与该三项准则安全特性相一致,证明了RBAC的可靠性[2]。

2.2.2 数据管理模块

项目必须考虑后期的扩展性,而随着业务数据量的激增,框架对数据的承受能力必须有很好的把握,或者说要有足够的扩展性,在后期进行扩展。作为一个抽象的单系统,最小系统架构来说,最大化地减少系统负担并且有足够的扩展性,都是不可或缺的。图3是数据管理模块的抽象结构图,其中不包含任何数据分析的模块,只做数据管理功能。

1)ORM框架

如图3所示,ORM(Object Relational Mapping,对象关系映射)框架,用于实现面向对象语言里不同类型系统的数据之间的转换[3]。在Java语言中,JDK(Java development kit Java开发工具包)提供了数据库映射数据的API,作为数据返还,ORM作为框架接收;底层需要数据库驱动,为了提高数据库复用率,提高系统吞吐率,我们可以使用数据库连接池来进行并发优化。

基于Java语言的开源ORM框架有Hibernate和Mybatis,前者是全自动化的集成框架,包括数据映射,数据库建表,增删改查语言的自动生成;而Mybatis则是一个半自动框架,提供了大量接口供用户调用,这种半自动化给了用户很大的自由性,所以最小系统框架选择使用Mybatis框架。

2)数据库连接池

著名的数据库连接池开源组件有Druid,c3p0,dbcp。本系统采用的数据库连接池是阿里开源的Druid,相比于其他两款数据库连接池,Druid提供了强大的扩展和监控功能,在适应大数据方面,容错率和性能上都相当的出色。

3总结

本文从框架的层面,分析和综合了绝大多数程序架构的特点和共性,抽象化地提出了互联网应用最小系统架构的概念。其特点是抽离了业务逻辑实现系统运行的最小化,同时保证了系统的可扩展性。

参考文献:

[1] 百度.JSON[EB/OL].[2020-05-24].https://baike.baidu.com/item/JSON,2015-5-11.

[2] 熊厚仁,陈性元,张斌,等.基于RBAC的授权管理安全准则分析与研究[J].计算机科学,2015,42(3):117-123.

[3] 百度.ORM 对象关系映射[EB/OL]. [2020-05-24].https://baike.baidu.com/item对象关系映射/311152?fromtitle=ORM&fromid=3583252&fr=aladdin.

【通聯编辑:代影】

猜你喜欢
全局架构框架
基于FPGA的RNN硬件加速架构
Cahn-Hilliard-Brinkman系统的全局吸引子
量子Navier-Stokes方程弱解的全局存在性
功能架构在电子电气架构开发中的应用和实践
广义框架的不相交性
落子山东,意在全局
LSN DCI EVPN VxLAN组网架构研究及实现
WTO框架下
一种基于OpenStack的云应用开发框架
一种基于FPGA+ARM架构的μPMU实现