SpringBoot创建多模块项目和所遇到的问题

一:创建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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值