随着微服务的兴起,IDEA集成开发环境的项目中一般需要基于parent module配置多个子module,即使单体项目也可以通过这种方式提高项目的可扩展性,并便于后续单体项目升级到微服务。下面简单介绍一下一个demo,可供参考。
parent
->runA
->runB
->common
其中parent为父module,它下面有三个子module。common是基础模块,runA和runB均依赖common,runA和runB属于不同的业务或者功能模块,都可以打包成可执行jar包运行。
4.0.0
org.parent
parent
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
2.3.12.RELEASE
runA
runB
common
pom
8
8
maven 默认的打包类型为 jar,在项目聚合的时候,需要显式的将 父项目的 packing 指定为 pom,然后再指定所属的子模块。如果没有将packing 指定为pom ,那么子模块之间将无法正常的进行依赖传递。我们执行的maven命令的时候将首先对父项目执行,而后当 父项目 的packing 类型为 pom 时,将对所有的子模块执行同样的命令,否则将无法执行同样的命令,那么依赖的传递将无法由maven 编译或者打包命令 得以执行。maven官网文档链接地址:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html
父pom中也可以通过dependencyManagement标签对依赖的版本进行声明,如果子module pom文件不写版本号则默认继承父pom声明的版本号。
parent
org.parent
1.0-SNAPSHOT
4.0.0
common
jar
8
8
com.baomidou
mybatis-plus-boot-starter
3.4.3
com.baomidou
dynamic-datasource-spring-boot-starter
3.5.0
com.baomidou
mybatis-plus-generator
3.5.1
mysql
mysql-connector-java
com.oracle
ojdbc6
11.2.0.3
com.google.guava
guava
30.1.1-jre
org.freemarker
freemarker
2.3.31
org.projectlombok
lombok
1.18.24
org.slf4j
slf4j-api
org.springframework.boot
spring-boot-starter-web
com.fasterxml.jackson.datatype
jackson-datatype-guava
2.5.3
org.codehaus.jackson
jackson-core-asl
1.9.13
org.codehaus.jackson
jackson-mapper-asl
1.9.13
org.hibernate
hibernate-validator
5.2.4.Final
org.apache.commons
commons-lang3
3.5
commons-collections
commons-collections
3.2.2
commons-codec
commons-codec
1.10
com.alibaba
easyexcel
3.2.0
src/main/resources
**/*.properties
**/*.xml
**/*.yml
common模块作为基础模块被很多其他模块依赖,可以将公共依赖包放到这个pom文件中,也可以将功能依赖包放入上面的父pom文件中。
parent
org.parent
1.0-SNAPSHOT
4.0.0
runA
jar
8
8
org.parent
common
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
org.freemarker
freemarker
2.3.28
org.mybatis.spring.boot
mybatis-spring-boot-starter
net.sf.json-lib
json-lib
2.4
jdk15
com.alibaba
fastjson
1.2.75
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
2.2.4.RELEASE
repackage
需求在build中配置spring-boot-maven-plugin插件,打成可执行jar包。
4.0.0
parent
org.parent
1.0-SNAPSHOT
com.parent
runB
1.0-SNAPSHOT
runB
data preprocess for Spring Boot
8
org.common
common
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
2.2.4.RELEASE
repackage
这个和runA配置基本一致。
spring:
datasource:
dynamic:
primary: master
strict: false
datasource:
master:
url: jdbc:mysql://10.1.1.1:1234/dataflow?characterEncoding=utf-8&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
username: abc
password: abc
maxActive: 20
maxIdle: 20
maxWait: 60000
minIdle: 1
initialSize: 0
slave-def:
url: jdbc:mysql://10.1.1.2:3306/data_flow?characterEncoding=utf-8&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
username: def
password: def
slave-ghi:
url: jdbc:oracle:thin:@10.1.1.3:1521:ghi
driver-class-name: oracle.jdbc.driver.OracleDriver
username: ghi
password: ghi
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath*:abcMapper/*Mapper.xml,classpath*:defMapper/*Mapper.xml,classpath*:ghiMapper/*Mapper.xml
spring:
profiles:
active: dev
include: commondev
---
spring:
profiles: dev
application:
name: runB
server:
port: 8081
mybatis-plus:
mapper-locations: classpath*:abcMapper/*Mapper.xml,classpath*:defMapper/*Mapper.xml,classpath*:ghiMapper/*Mapper.xml
---
spring:
profiles: prod
application:
name: runB
server:
port: 8081
mybatis-plus:
mapper-locations: classpath*:abcMapper/*Mapper.xml,classpath*:defMapper/*Mapper.xml,classpath*:ghiMapper/*Mapper.xml
runA和runB类似,不再赘述。spring.profiles.include表示可以包含其他的配置文件,启动时可以看到启动信息:The following profiles are active: commondev,dev。