一:创建SpringBoot多模块项目(这里采用idea工具进行创建)
0.先说下这个项目的组织:这个项目有个以下几个模块,分别是common[公共],entity[实体类],dao[数据访问],service[业务],
controller[api接口1],sys[api接口2]
common是独立的模块,不依赖谁
entity依赖common
dao依赖entity,common
service依赖dao,entity,common
controller 和sys 依赖 service,dao,entity,common
1.创建一个父项目,先不用加依赖,和平时创建SpringBoot项目一样
这里是父 pom文件 需要注意的是父项目不需要打包,需要删除<bulid>里面的默认打包 plugin,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>askdao</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<mapper.starter.version>2.0.2</mapper.starter.version>
<pageHelper.starter.version>1.2.3</pageHelper.starter.version>
<mybatis.starter.version>2.0.0</mybatis.starter.version>
</properties>
<!--这里是子模块-->
<modules>
<module>askdao-entity</module>
<module>askdao-dao</module>
<module>askdao-service</module>
<module>askdao-controller</module>
<module>askdao-common</module>
<module>askdao-sys</module>
</modules>
<!--先不加依赖-->
<dependencies>
</dependencies>
<!--注意:父类不需要打包,所以得删除默认的spring-boot-maven-plugin-->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.然后在已经创建好的父项目下创建模块,比如common,entity,dao,service,[controller,sys ]等
new-->Module,然后就和上面创建父项目的过程一致,也不用加依赖,其中根据业务需求,common,entity,dao,servce 这几个模块不需要打包,所以可以去掉 build,也可以删除相应的启动类,贴出这几个模块的pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>askdao-common</name>
<description>Demo project for Spring Boot</description>
<dependencies>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao-entity</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>askdao-entity</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.youle</groupId>
<artifactId>askdao-common</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao-dao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>askdao-dao</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.youle</groupId>
<artifactId>askdao-entity</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao-service</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>askdao-service</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.youle</groupId>
<artifactId>askdao-dao</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
接下来就是 api接口模块了,下面上controller 和sys这两个模块的pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao-controller</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>askdao-controller</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<dependency>
<groupId>com.youle</groupId>
<artifactId>askdao-service</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--这里要指定启动类,--><mainClass>com.youle.askdao.AskdaoControllerApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao-sys</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>askdao-sys</name>
<description>Demo project for Spring Boot</description>
<dependencies>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.youle.askdao.AskdaoSysApplication</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
需要注意的是:因为api接口模块需要打包,所以需要添加 build,并且指定启动类 mainClass的路径,这个路径一般是你父项目包下的启动类,也就是不要具体到某一个模块,否则可能会存在注解不上某一个模块的问题 比如:
com.youle.askdao.AskdaoControllerApplication,这个askdao下面的启动类,而不是askdao.controller
*创建项目参考的博文:https://blog.youkuaiyun.com/baidu_41885330/article/details/81875395*
3.下面是我的结构
4.加入相关依赖
因为子模块会继承父模块的依赖,个人认为将依赖添加到父项目里面最好,下面是父pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.youle</groupId>
<artifactId>askdao</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>askdao</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<mapper.starter.version>2.0.2</mapper.starter.version>
<pageHelper.starter.version>1.2.3</pageHelper.starter.version>
<mybatis.starter.version>2.0.0</mybatis.starter.version>
</properties>
<!--这里是子模块-->
<modules>
<module>askdao-entity</module>
<module>askdao-dao</module>
<module>askdao-service</module>
<module>askdao-controller</module>
<module>askdao-common</module>
<module>askdao-sys</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- mybatis启动器 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.starter.version}</version>
</dependency>
<!-- 通用Mapper启动器 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>${mapper.starter.version}</version>
</dependency>
<!-- 分页助手启动器 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pageHelper.starter.version}</version>
</dependency>
<!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!--<scope>runtime</scope>-->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!--MQ-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<!--swagger2 start-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
<!--swagger2 end-->
<!--redis start-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.0</version>
</dependency>
<!--redis end-->
<!--auth-->
<!--spring boot 整合shiro依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!--shiro依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.6</version>
</dependency>
<!--auth end-->
<!--log begin-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!--log end-->
<!-- Apache工具组件 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<!--<version>1.2.47</version>-->
<version>1.2.58</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<!-- 解析xls HSSFWorkbook-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- 解析xlsx XSSFWorkbook-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
<!--校验类属性-->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
</dependency>
<!--hutool 工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.10</version>
</dependency>
<!--CSV表格-->
<dependency>
<groupId>net.sourceforge.javacsv</groupId>
<artifactId>javacsv</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
5.添加数据源
父项目的依赖加好了之后,等待下载依赖完成
因为加入了 mysql和mybatis,redis的依赖,我们在需要添加数据源
如下,在controller的模块中yml文件中添加数据源
spring:
profiles:
active: dev
servlet:
multipart:
enabled: true
# 上传一个文件最大值,默认1Mb
max-file-size: 10MB
# 上传多个文件最大值,默认10Mb
max-request-size: 100MB
# rabbitmq:
# host: 192.168.217.128
# username: test1
# password: test1
# virtual-host: /
# template:
# retry:
# enabled: true
# initial-interval: 10000ms
# max-interval: 300000ms
# multiplier: 2
# exchange: flowOperation.exchange
# publisher-confirms: true
http:
#连接池
maxTotal: 50 #最大连接数
defaultMaxPerRoute: 30 #并发数
connectTimeout: 120000 #创建连接的最长时间
connectionRequestTimeout: 120000 #从连接池中获取到连接的最长时间
socketTimeout: 120000 #数据传输的最长时间
validateAfterInactivity: 60000 #可用空闲连接过期时间,重用空闲连接时会先检查是否空闲时间超过这个时间,如果超过,释放socket重新建
interface:
#收费接口
charge:
#接口参数
url: https://api.iot.10086.cn
version: v5
#认证服务接口3.1.1
authentication: ec/get/token
appid:
password:
#卡状态接口3.2.6
simStatus: ec/query/sim-status
#卡信息3.2.1(开卡时间、首次激活时间)
simInfo: ec/query/sim-basic-info
#资费订购实时查询3.6.1(套餐生效时间、套餐失效时间)
orderedOfferings: ec/query/ordered-offerings
#单卡本月套餐内流量使用量实时查询3.5.6(总流量、使用量、剩余量)
simData: ec/query/sim-data-margin
#PBoss接口
pboss:
appid: "AHND18Z"
password: "QYHZB"
ebid: "0001000000262"
url: "http://183.230.96.66:8087v2/batchquerycardinfo_inner"
这个是dev.yml
server:
port: 8080
tomcat:
max-connections: 20000
max-threads: 1000
servlet:
session:
timeout: 120m
address: 0.0.0.0
spring:
datasource:
url: jdbc:mysql://192.168.218.236:3306/flow_operation?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
username: root
password: iot@10086
# password: 123456
# redis
redis:
# Redis数据库索引(默认为0)
database: 1
# Redis服务器地址
host: 192.168.218.236
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
password: 123456
lettuce:
pool:
# 连接池最大连接数(使用负值表示没有限制)
max-active: 200
# 连接池中的最大空闲连接
max-idle: 20
# 连接池中的最小空闲连接
min-idle: 0
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# 连接超时时间(毫秒)默认是2000ms
timeout: 2000ms
#mybatis
mybatis:
type-aliases-package: com.youle.askdao.*.entity
mapper-locations: classpath*:mapper-xml/**/*.xml #注意:一定要对应mapper映射xml文件的所在路径
configuration:
map-underscore-to-camel-case: true
file:
cardsfail: /opt/file/cards/
# 打印sql
#logging:
# level:
# com.chinamobile.flow.mapper : debug
# com.chinamobile.sys.mapper : debug
在启动类上添加相关注解,
@MapperScan("com.youle.askdao.dao") //mapper文件的路径
@EnableSwagger2
@EnableAutoConfiguration
@EnableCaching
@SpringBootApplication
@MapperScan("com.youle.askdao.dao")
public class AskdaoControllerApplication {
public static void main(String[] args) {
SpringApplication.run(AskdaoControllerApplication.class, args);
}
}
二.进行测试
这里最基本的例子:
common: 可以加入相关的配置文件,比如:统一异常处理,错误码,返回的对象,uitl包,swagger等
entity:模块创建一个实体类User
dao: 创建一个mapper UserMapper,添加一个方法,selectAll(),这里可以在该模块的resource目录下创建
对应的mybatis 的userMapper.xml文件
service: 调用dao里面的 userMapper.selectAll()
controller: 添加一个接口,调用service里面的方法,我这里加入了swagger,然后可以通过swagger来访问接口
接下来,我们通过访问 http://localhost:8080/swagger-ui.html#/来访问接口,如果没加入swagger,通过http://localhost:8080来访问
1.首先得先install被依赖的模块,common,entity,dao,service
全部install完了之后,然后进行打包 controller模块
2.打包多个模块
细心的同学可能会发现,sys模块还没说,这个模块和controller模块是一样的,都是api接口模块,但是需要注意的是:在yml文件中,需要更改端口号,其他的配置可以一致或者更改数据源,这样,按照这种方式,以后如果有其他的业务需求,我们就可以
再次添加相应的模块
以上就是SpringBoot多模块开发的应用了,如果有错误,还望大佬指正
源码链接: https://gitee.com/guitian1970/youle-askdao