一:创建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.csdn.net/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: devservlet:multipart:enabled: true# 上传一个文件最大值,默认1Mbmax-file-size: 10MB# 上传多个文件最大值,默认10Mbmax-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.cnversion: v5#认证服务接口3.1.1authentication: ec/get/tokenappid:password:#卡状态接口3.2.6simStatus: 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: 8080tomcat:max-connections: 20000max-threads: 1000servlet:session:timeout: 120maddress: 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=trueusername: rootpassword: iot@10086
#    password: 123456
# redisredis:# Redis数据库索引(默认为0)database: 1# Redis服务器地址host: 192.168.218.236# Redis服务器连接端口port: 6379# Redis服务器连接密码(默认为空)password: 123456lettuce:pool:# 连接池最大连接数(使用负值表示没有限制)max-active: 200# 连接池中的最大空闲连接max-idle: 20# 连接池中的最小空闲连接min-idle: 0# 连接池最大阻塞等待时间(使用负值表示没有限制)max-wait: -1ms# 连接超时时间(毫秒)默认是2000mstimeout: 2000ms
#mybatis
mybatis:type-aliases-package: com.youle.askdao.*.entitymapper-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

SpringBoot创建多模块项目和所遇到的问题相关推荐

  1. SpringBoot+Maven 多模块项目的构建、运行、打包实战

    https://www.jb51.net/article/140772.htm?proxy=1 这篇文章主要介绍了SpringBoot+Maven 多模块项目的构建.运行.打包实战,小编觉得挺不错的, ...

  2. 基于maven使用IDEA创建多模块项目

    原文地址:http://blog.csdn.net/williamhappy/article/details/54376855 鉴于最近学习一个分布式项目的开发,讲一下关于使用IntelliJ IDE ...

  3. maven安装与创建多模块项目【转】

    maven是一个比较流行的项目管理工具,在最近参与的项目中,也使用了maven,本文主要对在项目中的使用做一个总结,主要涉及maven的安装于配置.maven创建多模块项目. 1.maven安装与配置 ...

  4. 解决IDEA创建多模块项目找不到创建class类的问题

    解决IDEA创建多模块项目找不到创建class类的问题 参考文章: (1)解决IDEA创建多模块项目找不到创建class类的问题 (2)https://www.cnblogs.com/memoa/p/ ...

  5. 解决springboot maven多模块项目打包的时候某个被依赖的模块报错找不到main class

    springboot maven 多模块项目打包的时候某个被依赖的模块报错 [ERROR] Failed to execute goal org.springframework.boot:spring ...

  6. Unable to start embedded container和Consider defining a bean:SpringBoot搭建多模块项目错误

    SpringBoot搭建多模块项目错误,我是参照这个网址搭建的 然后搭建过程中就遇到了一些bug:https://blog.csdn.net/hanchao5272/article/details/8 ...

  7. springboot dubbo 多模块项目dubbo提供者和消费者配置及代码

    注:本文只是介绍我成功使用springboot dubbo 多模块项目的配置及核心代码,若问题没得到解决或需要可运行的源码,文章末尾有说明. springboot集成dubbo过程坑太多,dubbo提 ...

  8. Java工作笔记-使用Maven创建多模块项目

    目录 前言 演示 前言 在某些项目中会用到多模块,一般情况下都使用Maven进行操作,然后手动写porn.xml,这样就算是spring boot也是手动写的,并没有使用官方的初始化项目工具. 演示 ...

  9. 基于SpringBoot构建分模块项目

    前言 步骤过于详细,多图慎入!!! 假设一个场景,要开发一个4s店维修部的办公系统,其功能有:前台接待,维修抢单,财务结算,库存管理.于是我们创建一个项目balabalabala写完交工. 一段时间后 ...

最新文章

  1. RANK() OVER(PARTITION BY deptno ORDER BY empno)
  2. 女生适不适学习Java编程
  3. (三)Controller接口控制器详解(二)
  4. 前端学习(2080):计算属性和methods得对比
  5. 为什么从网页上打印怎们好像被缩放_全网最详细关于3D打印的zbrush技术
  6. python基础--闭包函数和装饰器
  7. python转视频格式高清_树莓派环境下使用python将h264格式的视频转为mp4
  8. 为何公众号推送会延迟发送_微信公众号客服消息群发和推送功能如何实现?
  9. react 报 Objects are not valid as a React child (found: object with keys {}). If you meant to render.
  10. 深度学习系列 -- 神经网络和深度学习(Neural Networks and Deep Learning)(一):深度学习引言以及神经网络编程基础
  11. Python入门(每日学习打卡7.12)
  12. 层次包围盒和均匀网格
  13. 硬盘安装Fedora 12
  14. python package for Regime switching model 马尔可夫区制转换模型代码
  15. rabbit MQ的rpc功能详解
  16. 自定義ListActivity(一)
  17. visual studio装哪些_全球有哪些院校的平面设计好?
  18. Spring Boot 注解原理
  19. css textarea行数_超级简单:在一个TextArea中如何限制行数和字符数-阿里云开发者社区...
  20. 中国黑色金属行业十四五产量需求及发展战略规划研究报告2021版

热门文章

  1. c语言编程格式错误是什么意思,求大神看看这个为什么在OJ上显示格式错误
  2. 11种离散型变量编码方式及效果对比
  3. 2020年统考计算机应用基础,2020计算机考研统考:计算机应用基础都考些什么?
  4. 数字化战略“五行”图
  5. 祁连山水泥厂堆料机的无线解决方案
  6. 数学建模(三)—— 自动化车床管理
  7. python去噪音_如何使用opencvpython去除图像噪声?
  8. 上计算机课学生玩游戏该怎么处理,初中信息技术课学生玩游戏的原因与解决对策...
  9. android创建Guideline,初识ConstraintLayout之参照线(Guidelines)
  10. 关于Android获取流量计数TrafficStats.getUidRxBytes(uid)和TrafficStats.getUidTxBytes(uid)返回-1解决方案