本栏目责任编辑:谢媛媛
软件设计开发
Springboot 最小系统的设计与实现
江健锋,徐振平
(长江大学,湖北荆州434023)
摘要:Springboot 是在Spring 基础上衍生的实用性框架,其目的并不是要替代Spring ,而是为了改变Spring 框架中烦琐的配
置项而诞生。其特点是更好地和第三方库结合进行开发,减少大量的配置代码,达到开箱即用的目的。而Springboot 的最小系统架构,是在web 开发环境中,把安全验证、数据交互、错误返回等web 程序基本要素结合成一个架构系统,不随业务内容改变。而当项目业务内容发生改变时,只需要在该最小系统的基础上,实现业务逻辑即可。关键词:Java ;Springboot ;Mybatis ;SpringSecurity ;Json 中图分类号:TP311文献标识码:A 文章编号:1009-3044(2021)04-0062-02
开放科学(资源服务)标识码(OSID ):
1引言
作为Apache 基金的顶级项目,Springboot 框架的提出是为了解决传统Spring 框架配置烦琐的问题,
而且配备了一系列诸如SQL 、NoSQL 数据库、分布式系统等开源项目作为扩展项,堪称全家桶,是现在绝大多数互联网单系统或分布式系统的必备框架。而传统的基于Springboot 框架的系统只是对Spring 全家桶按需使用,没有明确规划,在后期会造成项目的结构混乱,例如:返回数据不统一造成前后端联调复杂;缺乏全局错误处理,错误日志复杂,定位问题变得困难。所以,为了排除不同项目业务对系统造成的差异性,我们可以构建最小系统框架,方便项目的拓建,并且给团队一个适应的编程规范。
2系统架构描述
2.1最小系统架构
如图1,绝大多数系统架构核心必须包含三大模块,与用户相关的业务模块;连接底层的数据管理模块;以及用于中间协调系统的基础功能模块;就企业级而非个人的项目来说,除了业务模块不一样之外,基础模块在逻辑功能上是共通的。最小系统架构,其实就是构建系统的安全功能,数据交互封装,全局异常处理,数据库连接等模块功能,同时避免受业务逻辑的干扰,成为脱离业务单独运行的系统。下文将对系统的三个模块进行剖析。
图1应用框架模型图
2.2系统采用技术2.2.1基础功能模块
如图2所示,对于基础功能模块来说,有三个功能是不可
或缺的,分别是安全验证,前后端数据交互,异常处理,下文将对这个功能逐一说明。
图2基础功能模块
1)全局异常处理众所周知,用户的输入不可能完全按照程序员的意愿来进行;同时,程序员无法对程序运行的各种情况考虑的面面俱到,因此,运行时出现异常或者错误是很难避免的。如果把程序内部响应的错误直接返回给用户,会给用户造成疑惑。综上,我们应该对程序所有可能发生的错误都进行捕捉,把错误信息封装,挑选用户能理解的部分进行返回,提高用户体验度,全局异常处理就显得十分重要。
全局异常处理应用的是SpringMVC 提供的组件增强注解@ControllerAdvice ,以及捕捉系统异常的注解@ExceptionHan⁃dler 来进行全局声明,对于不同的类型,可以返回不同的消息。对应部分代码如下:
@ControllerAdvice @Slf4j
publicclassGlobalExceptionHandler {//捕获运行时异常
@ExceptionHandler(RuntimeException.class)@ResponseBody
publicJsonResulthandlerBusinessException(RuntimeExcep ⁃tion ex){
收稿日期:2020-10-20springboot框架的作用
62
软件设计开发
本栏目责任编辑:谢媛媛Computer Knowledge and Technology 电脑知识与技术
第17卷第4期(2021年2月)
<("错误:{}"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 框架,Spring⁃Security 是一款企业级的权限认证授权框架,作为Spring 全家桶的一员,和Springboot 具有很好的契合性。同时,安全模型的结构设计采用RBAC(Role-Based Access Control 基于角的访问控制)模型设计。文献2通过提出一致性准则、安全性准则和可用性准则分别证明了RBAC 模型安全特性与该三项准则安全特性相一致,证明了RBAC 的可靠性[2]。2.2.2数据管理模块
项目必须考虑后期的扩展性,而随着业务数据量的激增,
框架对数据的承受能力必须有很好的把握,或者说要有足够的扩展性,在后期进行扩展。作为一个抽象的单系统,最小系统架构来说,最大化地减少系统负担并且有足够的扩展性,都是不可或缺的。图3是数据管理模块的抽象结构图,其中不包含任何数据分析的模块,
只做数据管理功能。
图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].baike.baidu/item/JSON,2015-5-11.
[2]熊厚仁,陈性元,张斌,等.基于RBAC 的授权管理安全准则分析与研究[J].计算机科学,2015,42(3):117-123.
[3]百度.ORM 对象关系映射[EB/OL].[2020-05-24].baike.baidu/item 对象关系映射/311152?fromtitle=ORM&fromid=3583252&fr=aladdin.
【通联编辑:代影】
63
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论