文章目录
- 前言
- 为什么要重构?
- 1. 原先spring架构可维护性越来越低
- 2. 集成新技术的成本变高
- 3. 各种不同环境的问题依然时不时的会存在
- 4. 重构过程能对更多的技术细节进行深入学习
- 重构清单
- 项目结构重构
- 配置文件从原先的xml到完全properties
- 各类jar包从单独到结成starter方式的重构
- 单元测试保证重构后的系统功能
- (一)项目结构重构
- 小结
前言
最近把一个从2015年开发至今的一个个人项目从传统的spring彻底重构成springboot项目,用了大概一个多月的时间,里面的坑还是挺多的,但是收获也是满满,记录一下,希望能帮助那些准备或者在做这一步的朋友(有任何问题都可以私信我,非常乐意解答)。
为什么要重构?
1. 原先spring架构可维护性越来越低
- 刚开始xml+配置文件的方式感觉没什么,但是随着各种参数、动态配置的增加xml中引用properties中的变量使得开发人员维护变得越来越复杂(我一个人维护有时候都找半天), 而springboot的约定大于配置理念使配置基本框架配置变得清晰易维护
- springboot查问题更加简单:由于配置都非常固定,区别原先spring方式各种不同的配置,亲测出错概率大大降低,极大提升了维护性。
- 由于原生spring,得自己管理各种jar包,所以会出现各种jar包冲突等一些列的问题,这大大降低了维护性, 而springboot则有对应开发的starter,各种版本都做到了统一,出错概率也大大降低。
2. 集成新技术的成本变高
- 由于springcloud的发展,springboot变成了一个基础的架构,而如果还是沿用原来的spring xml配置的方式文档和资料变的越来越少,机会成本也变大了。反观springboot资料变得越来越丰富集成一个新的框架或者替换都是分分钟的事情
3. 各种不同环境的问题依然时不时的会存在
- 由于原先spring的方式,或多或少都会依赖外部的容器去做启动,虽然刚开始可能没什么问题,但是随着各种依赖以及开发和测试环境的不同,偶尔会出现本地测试好好的,而一发布到测试就会有各种问题,而springboot内嵌容器就非常好的解决了这个问题,容器被打包在了发布jar中,隔离了不同环境因素,使得发布出现问题的概率大大降低
4. 重构过程能对更多的技术细节进行深入学习
- 重构能迫使自己对原先的代码细节重新梳理,思考原先架构的合理性
- 重构过程会对各种第三方依赖做梳理,能够更好的了解细节
- 重构的过程遇到了很多的问题,解决的过程恰恰是宝贵的财富
重构清单
-
项目结构重构
-
配置文件从原先的xml到完全properties
-
各类jar包从单独到结成starter方式的重构
-
单元测试保证重构后的系统功能
从spring到springboot由于“ 约定大于配置”的理念简化了很多配置,项目的分层结构也可以做一次重构,不需要沿用原来spring的方式,做到更加简单和清晰。
原来的结构目录:
结构大致是 biz作为基础的公用组件, web为前端,采用springmvc(虽然现在流行前后端分离架构,但是独立开发也还ok,后期准备拆分)、 schedule为定时任务、还有back和service 分别是后台管理和对外微服务这两个就不详细展开。
web模块依赖biz模块,而本身里面又分为base、home、war,项目的结构比较的复杂(主要是原来公司的一个规范),这里主要改造的点:
- springboot mvc项目不需要打包成war,所以直接干掉war模块。
- 保留home模块(各种Controller),base作为打包模块也保留。
改造完成后结构:
改造完成以后可以看出只有core模块和package打包模块,比较清晰,很多刚接触maven的小伙伴会疑问为什么要单独package模块做打包用,不是可以直接打包吗,这里正好提一下,也是这次重构的收获:
如果是单独模块的maven项目,其实没什么难度,都只有一个pom打包成jar只需要
<packaging>jarpackaging>
就可以打包&#xff0c;但是如果项目有公共模块&#xff0c;需要聚合别模块这样maven的项目结构就会变得稍微复杂一点&#xff1a;
这里的package模块只做部分聚合用&#xff0c;这里就是聚合了公用biz和web模块&#xff1a;&#xff08;如果对maven多模块感兴趣的朋友后面我会考虑单独出一篇&#xff09;&#xff0c;而原先war模块存在的原因就是要打包成war&#xff0c;不过springboot打成jar会更方便所以直接取消了war模块变得更加简单&#xff0c;对于新上手的程序员会更加友好。
小结
这篇主要大致梳理了原先spring老项目为什么重构&#xff0c;和如何开始重构&#xff0c;重构的过程虽然很多坑很苦但是收获还是很大的&#xff0c;后面的文章会沿着重构清单继续下去&#xff0c;有任何问题都可以留言或者私信我&#xff0c;我会认真回答~~