SpringBoot单体多模块项目环境搭建

快速搭建一个基于SpringBoot + Mybatis Plus 的多模块的单体架构项目。

1、创建Maven子模块

按照如下目录结构创建一个多模块的Maven工程。

sh 复制代码
 lease
 ├── common(公共模块------工具类、公用配置等)
 │   ├── pom.xml
 │   └── src
 ├── model(数据模型------与数据库相对应地实体类)
 │   ├── pom.xml
 │   └── src
 ├── web(Web模块)
 │   ├── pom.xml
 │   ├── web-admin(后台管理系统Web模块------包含mapper、service、controller)
 │   │   ├── pom.xml
 │   │   └── src
 │   └── web-app(移动端Web模块------包含mapper、service、controller)
 │       ├── pom.xml
 │       └── src
 └── pom.xml

步骤1:创建项目根模块

xml 复制代码
 <?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>
     <groupId>com.ghm</groupId>
     <artifactId>JavaPracKit</artifactId>
     <version>1.0-SNAPSHOT</version>
     <packaging>pom</packaging>
 ​
     <!-- 子模块 -->
     <modules>
         <module>common</module>
         <module>model</module>
         <module>web</module>
     </modules>
 ​
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 ​
 </project>

步骤2:创建common子模块

xml 复制代码
 <?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.ghm</groupId>
         <artifactId>JavaPracKit</artifactId>
         <version>1.0-SNAPSHOT</version>
     </parent>
 ​
     <artifactId>common</artifactId>
 ​
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 ​
 </project>

步骤3:创建model子模块

xml 复制代码
 <?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.ghm</groupId>
         <artifactId>JavaPracKit</artifactId>
         <version>1.0-SNAPSHOT</version>
     </parent>
 ​
     <artifactId>model</artifactId>
 ​
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 ​
 </project>

步骤4:创建web子模块

xml 复制代码
 <?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.ghm</groupId>
         <artifactId>JavaPracKit</artifactId>
         <version>1.0-SNAPSHOT</version>
     </parent>
 ​
     <artifactId>web</artifactId>
     <packaging>pom</packaging>
 ​
     <!--  子模块  -->
     <modules>
         <module>admin</module>
     </modules>
 ​
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 ​
     <dependencies>
 ​
         <!--    引入common模块    -->
         <dependency>
             <groupId>com.ghm</groupId>
             <artifactId>common</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
 ​
 </project>

步骤5:创建web-admin子模块

xml 复制代码
 <?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.ghm</groupId>
         <artifactId>web</artifactId>
         <version>1.0-SNAPSHOT</version>
     </parent>
 ​
     <artifactId>admin</artifactId>
 ​
     <properties>
         <maven.compiler.source>17</maven.compiler.source>
         <maven.compiler.target>17</maven.compiler.target>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     </properties>
 ​
 </project>

2、SpringBoot配置

步骤1:配置pom工程

父工程pom.xml文件中增加如下内容:

xml 复制代码
 <!-- 继承Spring Boot父项目 -->
 <parent>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-parent</artifactId>
     <version>3.0.5</version>
     <relativePath/>
 </parent>
 ​
 <!-- 注意:直接替换pom文件中原有的properties -->
 <properties>
     <maven.compiler.source>17</maven.compiler.source>
     <maven.compiler.target>17</maven.compiler.target>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
     <mybatis-plus.version>3.5.3.1</mybatis-plus.version>
     <swagger.version>2.9.2</swagger.version>
     <jwt.version>0.11.2</jwt.version>
     <easycaptcha.version>1.6.2</easycaptcha.version>
     <minio.version>8.2.0</minio.version>
     <knife4j.version>4.1.0</knife4j.version>
     <aliyun.sms.version>2.0.23</aliyun.sms.version>
 </properties>
 ​
 <!--配置dependencyManagement统一管理依赖版本-->
 <dependencyManagement>
     <dependencies>
         <!--mybatis-plus-->
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>${mybatis-plus.version}</version>
         </dependency>
 ​
         <!--knife4j文档-->
         <dependency>
             <groupId>com.github.xiaoymin</groupId>
             <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
             <version>${knife4j.version}</version>
         </dependency>
 ​
         <!--JWT登录认证相关-->
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt-api</artifactId>
             <version>${jwt.version}</version>
         </dependency>
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt-impl</artifactId>
             <scope>runtime</scope>
             <version>${jwt.version}</version>
         </dependency>
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt-jackson</artifactId>
             <scope>runtime</scope>
             <version>${jwt.version}</version>
         </dependency>
 ​
         <!--图形验证码-->
         <dependency>
             <groupId>com.github.whvcse</groupId>
             <artifactId>easy-captcha</artifactId>
             <version>${easycaptcha.version}</version>
         </dependency>
 ​
         <!--对象存储,用于存储图像等非结构化数据-->
         <dependency>
             <groupId>io.minio</groupId>
             <artifactId>minio</artifactId>
             <version>${minio.version}</version>
         </dependency>
 ​
         <!--阿里云短信客户端,用于发送短信验证码-->
         <dependency>
             <groupId>com.aliyun</groupId>
             <artifactId>dysmsapi20170525</artifactId>
             <version>${aliyun.sms.version}</version>
         </dependency>
     </dependencies>
 </dependencyManagement>

web模块的pom.xml文件中增加如下内容:

xml 复制代码
 <!--包含spring web相关依赖-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
 </dependency>
 ​
 <!--包含spring test相关依赖-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-test</artifactId>
     <scope>test</scope>
 </dependency>
 ​
 <!-- Spring Boot Maven插件,用于打包可执行的JAR文件 -->
 <build>
     <plugins>
         <plugin>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-maven-plugin</artifactId>
         </plugin>
     </plugins>
 </build>

步骤2:创建application.yml文件

web-admin模块src/main/resources目录下创建application.yml配置文件,内容如下:

yaml 复制代码
server:
  port: 8080

步骤3: 创建SpringBoot启动类

web-admin模块 下创建com.atguigu.lease.AdminWebApplication类,内容如下:

java 复制代码
@SpringBootApplication
public class AdminWebApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminWebApplication.class, args);
    }
}

3、Mybatis-Plus配置

Mybatis-Plus为公用工具,故将其配置于common模块 。具体配置可参考其官方文档

步骤1:pom文件配置

common模块的pom.xml文件中增加如下内容:

xml 复制代码
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>

<!--mysql驱动-->
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-j</artifactId>
</dependency>

model模块的pom.xml文件中增加如下内容:

因为model模块下的实体类中需要配置Mybatis-Plus相关注解,故也需引入Mybatis-Plus依赖

xml 复制代码
<!--mybatis-plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>

步骤2:application.yml配置

yaml 复制代码
spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    url: jdbc:mysql://<hostname>:<port>/<database>?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=GMT%2b8
    username: <username>
    password: <password>
    hikari:
      connection-test-query: SELECT 1 # 自动检测连接
      connection-timeout: 60000 #数据库连接超时时间,默认30秒
      idle-timeout: 500000 #空闲连接存活最大时间,默认600000(10分钟)
      max-lifetime: 540000 #此属性控制池中连接的最长生命周期,值0表示无限生命周期,默认1800000即30分钟
      maximum-pool-size: 12 #连接池最大连接数,默认是10
      minimum-idle: 10 #最小空闲连接数量
      pool-name: SPHHikariPool # 连接池名称
      
#用于打印框架生成的sql语句,便于调试
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

注意 :需根据实际情况修改hostnameportdatabaseusernamepassword

步骤3:添加配置类

common模块 下创建com.atguigu.lease.common.mybatisplus.MybatisPlusConfiguration类,内容如下:

java 复制代码
@Configuration
@MapperScan("com.atguigu.lease.web.*.mapper")
public class MybatisPlusConfiguration {
  
}

注意@MapperScan()的包路径需要根据实际情况进行修改。

4、Knife4j配置

步骤1:pom文件配置

web模块的pom.xml文件添加如下内容

因为web-app模块同样需要 依赖,故在两个的父工程引入依赖即可

xml 复制代码
<!-- knife4j -->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>

model模块的pom.xml文件添加上述内容

因为model模块下的实体类需要配置Knife4j相关注解,故也需引入Knife4j依赖

xml 复制代码
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>

步骤2:添加配置类

后台管理系统和移动端的接口配置并不相同,所以需各自编写一个配置类。在web-admin模块 下创建com.atguigu.lease.web.admin.custom.config.Knife4jConfiguration类,内容如下:

java 复制代码
@Configuration
public class Knife4jConfiguration {

    @Bean
    public OpenAPI customOpenAPI() {

        return new OpenAPI().info(
                new Info()
                        .title("后台管理系统API")
                        .version("1.0")
                        .description("后台管理系统API"));
    }
    
    @Bean
    public GroupedOpenApi systemAPI() {

        return GroupedOpenApi.builder().group("系统信息管理").
                pathsToMatch(
                        "/admin/system/**"
                ).
                build();
    }

    @Bean
    public GroupedOpenApi loginAPI() {

        return GroupedOpenApi.builder().group("后台登录管理").
                pathsToMatch(
                        "/admin/login/**",
                        "/admin/info"
                ).
                build();
    }
    
    @Bean
    public GroupedOpenApi apartmentAPI() {

        return GroupedOpenApi.builder().group("公寓信息管理").
                pathsToMatch(
                        "/admin/apartment/**",
                        "/admin/room/**",
                        "/admin/label/**",
                        "/admin/facility/**",
                        "/admin/fee/**",
                        "/admin/attr/**",
                        "/admin/payment/**",
                        "/admin/region/**",
                        "/admin/term/**",
                        "/admin/file/**"
                ).build();
    }
    @Bean
    public GroupedOpenApi leaseAPI() {
        return GroupedOpenApi.builder().group("租赁信息管理").
                pathsToMatch(
                        "/admin/appointment/**",
                        "/admin/agreement/**"
                ).build();
    }
    @Bean
    public GroupedOpenApi userAPI() {
        return GroupedOpenApi.builder().group("平台用户管理").
                pathsToMatch(
                        "/admin/user/**"
                ).build();
    }
}

注意pathsToMatch参数需要根据实际情况进行配置。

相关推荐
期待のcode2 小时前
MyBatis-Plus通用枚举
java·数据库·后端·mybatis·springboot
暹罗软件开发2 小时前
多线程协作利器:CountDownLatch 核心用法与场景解析
后端
天天摸鱼的java工程师2 小时前
支付回调处理,咱得整得 “幂等可靠” 不翻车
java·后端
踏浪无痕2 小时前
高并发写入 API 设计:借鉴 NSQ 的内存队列与背压机制
后端·面试·go
⑩-2 小时前
Spring 事务失效
java·后端·spring
BingoGo2 小时前
告别 Shell 脚本:用 Laravel Envoy 实现干净可复用的部署
后端
Cache技术分享2 小时前
267. Java 集合 - Java 开发必看:ArrayList 与 LinkedList 的全方位对比及选择建议
前端·后端
2501_921649492 小时前
亚太股票数据API:日股、韩股、新加坡股票、印尼股票市场实时行情,实时数据API-python
开发语言·后端·python·websocket·金融
爱上妖精的尾巴2 小时前
6-1WPS JS宏 new Set集合的创建
前端·后端·restful·wps·js宏·jsa