记录下spring boot 多模块项目的设置过程;首先简单说下为啥需要多模块,一个模块分目录行不行,当然可以,但是这样会导致多个团队开发的时候混乱,会有很多冲突;如果根据领域设计将项目按照不同的领域进行划分,后续维护起来会方便很多;对于以后如果进行微服务的拆分也是很方便的,直接将对应的模块迁移成一个单独的服务即可;还有针对业务初期,可以考虑一个大的项目,不同的功能,比如商城,下单,支付分别建立不同的模块,后期如果业务发展迅速,直接拆分成对应的模块为微服务项目即可;
接下来会用一个简单的项目演示,将springboot的web层,service层,dao层拆分成不同的模块;通过一个简单的crud来测试下;
项目目录结构
1.首先最外层是pom.xml;最外层的pom,作为项目的root pom,文件如下
4.0.0 org.springframework.boot spring-boot-starter-parent 2.6.4 com.example demo-multiple 0.0.1-SNAPSHOT pom我们一般定义整个项目的依赖,比如spring-boot-starter-parent;这里同时指定了整个项目有三个模块,分别是web,service,dao;
同时在dependencyManagement中设置了项目的依赖的版本管理;也就是下面的子模块以来的版本不需要指定版本了,比如web依赖了service这个模块,不需要设置版本,版本统一在这里进行管理;
2.web 模块
pom文件
4.0.0 com.example demo-multiple 0.0.1-SNAPSHOT com.example demo-web ${project.version} Demo project for Spring Boot每个子模块会设置parent的信息,同时自己的版本也从根pom中变量获取,同时以来的demo-servce我们看到是没有设置版本的;
web中的项目启动类如下
同时,我们在web中写了一个controller,请求如下
这个地方的TestService是demo-service这个module中的;
同时资源文件设置了数据库的连接信息
data.txt是数据库的初始化脚本,这里我们用的h2的数据库
3.service模块
pom中以来了dao模块
同时我们简单写一个查询方法,这个查询方法以来与dao模块
4.dao模块
dao模块对数据库进行操作,我们使用jpa,依赖如下所示
同时写一个简单的查询
对应的数据库实体如下所示
之后我们运行项目,启动之后,访问这个地址
会将数据库的用户信息打印出来,结果如下
[XwjUser{id=11, name=‘张三’, age=12, createDate=2020-04-17 00:00:00.0}, XwjUser{id=12, name=‘李四’, age=13, createDate=2020-04-17 00:00:00.0}, XwjUser{id=13, name=‘王五’, age=25, createDate=2020-04-17 00:00:00.0}, XwjUser{id=14, name=‘赵六’, age=17, createDate=2020-04-17 00:00:00.0}, XwjUser{id=15, name=‘吉米’, age=30, createDate=2020-04-17 00:00:00.0}]
总结:在跟pom中定义springboot-start作为整个项目的parent,然后配置整个项目的module信息;
同时在dependence-manage定义依赖版本管理,这样子项目中不用指定版本,只引入依赖;好处是多个子项目共同依赖版本发生变化时,只修改跟pom中设置的版本变量即可;同时各个子模块的package最好相同,这样在启动类中,设置一个扫描即可;
@SpringBootApplication(scanBasePackages = {“com.example.multiple”})
整个项目的资源文件放在web目录下;