SSM结合Servelt 3.0 模块化开发
现在微服务非常火,但是一个大项目拆分为多个小项目,项目部署时,需要的服务器资源会比较多,而且对于前期小公司而已成相对较高。
在Servelt3.0中新增了模块化开发,可以把web项目进行拆分,不同的项目不同的业绩,如果后期比较有钱人手足够后,对不同的项目拆分到不同的人负责,拆分出的项目可以单独启动而不影响,减少后期项目拆分重构的时间精力。
基本思路:
1、其中一个项目作为主项目,把其中部分功能拆分到其他项目中
2、拆分出的项目,有自己的页面、逻辑
3、拆分出一个公共项目提供接口以及公共类方便不同项目中相互调用(无业务、只提供接口、通过包标注不同拆分业务)
4、拆分出的项目实现本项目中需要对外提供数据的接口
业务拆分
最开始所有业务都在一个项目里面,最多只是通过package进行了业务区分。
现在对启动对业务进行拆分:
1、创建一个common项目,用于写接口已经公共类,以及基本的依赖。如下:
2、抽取user业务,用于user相关逻辑,依赖common,同时实现common用user相关接口用于外部调用。如下:
重点部分是抽取出的user项目。使用了Servlet3.0中模块化开发。
需要在user项目中,resource/META-INF新增web-fragment.xml。web-fragment.xml结构类似于web.xml,用于web的相关配置比如监听器、拦截器等
在user项目中,jsp、js等文件保持和普通的web项目一致,方便后期user项目单独启动,通过pom文件控制user项目中文件的打包,过滤一些公用的js、css等文件。
对于模块化开发需要注意的是:
1、资源文件需要在打包后生成的jar中的META-INF下,如jsp、js、css等(通过pom.xml控制)
2、需要在META-INF下新增web-fragment.xml
- 改拆分项目中是所有的公共js、css等每个项目中存一份,通过pom控制打包时过滤,其实可以把这些公用的文件放入common项目中,把common项目改造成模块化,但是这样的一个弊端是在写js时提示就会非常不友好。
缺点:
1、项目中不允许出现相同的类名,就算package不同也不行。
2、公共静态资源太多,每个项目中都有(可以放入静态文件服务器)
优点:
1、减少了项目的部署
2、通过接口拆分调用,后续单独部署时调用方,不需要修改
后续单独启动:
现在调用其他业务是通过pom中依赖直接调用,如果后续依赖的项目单独部署,需要通过远程服务调用。在项目中是通过common中的接口调用,对于调用方不需要知道实现类,所以后续远程调用可以通过hession、dubbo等SOA框架生成远程调用类,只需要新增远程调用服务的配置文件即可。
项目拆分后,因为目录是标准的web目录,所以直接修改pom文件中jar为war,或者集成springboot,新增配置文件后,直接启动部署,业务代码无需修改变动。
项目地址: