SpringBoot系列到现在虽然代码不多,但是感觉结构很乱,随着项目的复杂性提高,代码会越来越臃肿,耦合性高。
所以SpringBoot多模块很有必要,简单来说就是由以前按包分模块变为jar包分模块。在多模块jar模式下可以将某个jar拿出来对外共用,能大大提高代码复用率与开发效率。(后续SpringCloud就是将jar升级成war或者多个集合jar,也就是常说的微服务。)
一、模块划分 1.整体流程(1)新建springboot项目;
(2)在新建后的springboot项目中新建多个module;
(3)修改pom文件以及删除多余的文件及文件夹;
(4)将原项目的代码放进去;
通过Spring Initializr新建一个普通的spring boot项目(快速搭建springboot项目)
右击项目,选择新建Module
新建springboot-common、springboot-dao、springboot-service、springboot-api模块(每个子模块的groupId要建议一样)
全部建好之后,效果如下:
1.springboot项目
父模块springboot-parent中将src文件和多余的文件删除;
2.module模块
将springboot-service和springboot-dao下面的application启动类和对应配置文件application.yml,一起删除了,springboot-api模块的不动。
1.修改父模块pom.xml:将打包方式改为pom、新建modules标签
父模块pom.xm用于加载一些全局的或者公共的jar包,以及配置打包。
4.0.0 org.springframework.boot spring-boot-starter-parent 2.5.5 com.local.springboot springboot-parent 0.0.1-SNAPSHOT springboot-parent Demo project for Spring Boot pom springboot-common springboot-dao springboot-service springboot-api 1.8 net.sf.json-lib json-lib 2.4 jdk15 com.alibaba fastjson 1.2.70 commons-lang commons-lang 2.5 javax.servlet javax.servlet-api 4.0.0
2.修改api模块中的pom.xml
4.0.0 com.local.springboot springboot-api 0.0.1-SNAPSHOT springboot-api Demo project for Spring Boot com.local.springboot springboot-parent 0.0.1-SNAPSHOT com.local.springboot springboot-service 0.0.1-SNAPSHOT org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test io.springfox springfox-swagger2 2.9.2 io.springfox springfox-swagger-ui 2.9.2 com.github.xiaoymin swagger-bootstrap-ui 1.9.6 junit junit test junit junit test org.springframework.boot spring-boot-maven-plugin
其他模块都继承父模块,这里需要注意:由于我们把其他模块的启动类删了,父模块的spring-boot-maven-plugin插件也需要删掉,然后添加到需要的模块中去,因为springboot这个插件必须要启动类,否则则会出现错误:
Failed to execute goal org.springframework.boot: spring-boot-maven-plugin:2.5.5:repackage (repackage) on project springboot-common: Execution repackage of goal org.springframework.boot:spring-boot-maven- plugin:2.5.5:repackage failed: Unable to find main class
3.其他模块修改类似,springboot-dao模块存放数据库相关处理逻辑,需要加入mybatis依赖
springboot-dao模块pom.xml
5. 修改application.yml4.0.0 com.local.springboot springboot-dao 0.0.1-SNAPSHOT springboot-dao Demo project for Spring Boot com.local.springboot springboot-parent 0.0.1-SNAPSHOT com.local.springboot springboot-common 0.0.1-SNAPSHOT com.baomidou mybatis-plus-boot-starter 3.4.0 mysql mysql-connector-java
所有的xml配置和yml配置只能放在最外层的模块,application.yml只能放在springboot-api模块下
将以前的代码修改
#内置Tomcat容器配置
server:
port: 8080
servlet:
#应用路径,配置应用路径,可方便进行反向代理
context-path:
spring:
# 数据源
datasource:
url: jdbc:mysql://localhost:3306/local_develop?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
#profiles:
#active: @spring.profiles.active@
#i18n国际化路径
# messages:
# basename: i18n/messages
# 邮件
mail:
default-encoding: utf-8
# 配置 SMTP 服务器地址
host: smtp.qq.com
#发送方邮件名
username: 158111920@qq.com
#授权码
password: btdbkkdkrnxqbijh
# thymeleaf模板格式
thymeleaf:
cache: false
encoding: UTF-8
mode: HTML
servlet:
content-type: text/html
prefix: classpath:/templates/
suffix: .html
# aop
aop:
auto: true
proxy-target-class: true
#日志
logging:
config: classpath:logback-spring.xml
#mybatis-plus
mybatis-plus:
global-config:
db-config:
#主键策略
id-type: auto
field-strategy: not_empty
#驼峰下划线转换
column-underline: true
#逻辑删除配置
logic-delete-value: 0
logic-not-delete-value: 1
db-type: mysql
#声明全局默认类名的对应的表的前缀
table-prefix: t_
refresh: false
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
#打印出sql语句
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# # mapper-locations: classpath*:com/local/springboot/springbootdao/mapper*Mapper.xml
# mapper-locations: classpath*:com/local/springboot/springbootdao/mapper*Mapper.xml
SpringbootApiApplication.java启动类修改
package com.local.springboot.springbootapi;
import org.mapstruct.Mapper;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
//@ServletComponentScan
@EnableSwagger2
@SpringBootApplication(scanbasePackages = "com.local.springboot")
@MapperScan(basePackages = "com.local.springboot.*.mapper")
public class SpringbootApiApplication {
public static void main(String[] args) {
try {
SpringApplication.run(SpringbootApiApplication.class, args);
}catch (Exception e){
e.printStackTrace();
}
}
}
6. 代码搬家
将以前的代码搬运过来(不完整),大致结构如下:
启动程序,浏览器输入http://localhost:8080/user/list?pageNumber=1&pageSize=10
SpringBoot-简单多模块构建就到这里,还有很多没完善的地方,以后慢慢完善。
« 上一章:SpringBoot —— Filter过滤器的使用



