spring boot3多模块项目工程搭建-上(团队开发模板)

⛰️个人主页: 蒾酒

🔥系列专栏:《spring boot实战》


目录

写在前面

多模块结构优缺点

模块介绍

[Common 模块:](#Common 模块:)

[API 模块:](#API 模块:)

[Web 模块:](#Web 模块:)

[Service 模块:](#Service 模块:)

[DAO 模块:](#DAO 模块:)

搭建步骤

[1.创建 父Maven 项目](#1.创建 父Maven 项目)

2.添加各模块

3.配置父项目构建

4.配置Web模块构建

5.配置Service模块构建

6.配置DAO模块构建

7.配置API模块构建

8.配置Common模块构建

9.启动类位置修改

10.编写测试接口

11.打包测试

12.启动项目测试接口

写在最后


写在前面

本文介绍了springboot开发后端服务,多模块项目工程搭建。坚持看完相信对你有帮助。

同时欢迎订阅springboot系列专栏,持续分享spring boot的使用经验。

多模块结构优缺点

多模块项目将代码分成多个子模块,每个模块可以单独构建和管理。通常适用于大型项目或团队,以及那些希望将不同的功能或服务进行解耦的场景。

优点

  • 模块化:代码解耦,每个模块负责特定的功能,易于维护。
  • 团队协作:不同的团队可以在不同的模块上工作,减少冲突。
  • 重用性:可以将模块打包成共享库,供其他项目使用。

缺点

  • 复杂性:项目结构更复杂,构建和部署过程可能需要更多配置。
  • 管理难度:需要更多的协调和沟通,以确保模块之间的兼容性。

模块介绍

Common 模块

  • 职责:Common 模块通常包含各种通用的工具类、常量定义、异常类等。
  • 功能:
    • 存放通用的工具方法,如日期处理、字符串处理等。
    • 存放常量定义,如错误码、常量字符串、数据对象等。
    • 定义通用的异常类,如自定义的业务异常。

API 模块

  • 职责:API 模块用于定义应用程序的外部接口,通常是 RESTful API 或 GraphQL 接口。
  • 功能:
    • 定义接口的请求和响应对象。
    • 定义接口的路径、请求方法和参数。
    • 提供接口文档和描述。

Web 模块

  • 职责:Web 模块负责处理 HTTP 请求,将请求转发给 Service 模块处理,并返回响应给客户端。
  • 功能:
    • 处理请求参数的验证和转换。
    • 调用 Service 模块提供的服务进行业务逻辑处理。
    • 构建响应并返回给客户端。

Service 模块

  • 职责:Service 模块包含应用程序的业务逻辑,负责处理业务规则和数据处理。
  • 功能:
    • 实现应用程序的业务逻辑。
    • 调用 DAO 模块提供的数据访问接口进行数据库操作。
    • 处理事务管理。

DAO 模块

  • 职责:DAO 模块负责与数据库进行交互,执行数据访问操作。
  • 功能:
    • 提供数据访问对象(DAO)接口,定义对数据库的增删改查操作。
    • 实现 DAO 接口,执行 SQL 查询和更新操作。
    • 处理数据库连接和资源管理。

搭建步骤

1.创建 父Maven 项目

父工程在 Maven 项目中扮演着组织和管理子模块的角色。它通常是一个空的 POM(Project Object Model)文件,用于定义项目的基本信息和管理子模块的依赖关系。父工程可以统一管理子模块的版本号、依赖项和插件配置,从而简化项目的构建和维护过程。同时,父工程也可以提供一些公共的配置和资源,供子模块共享使用。

父项目不放任何代码用不到的文件全部删除

2.添加各模块

在项目中创建各个模块的子目录,如Common、API、Web、Service和DAO。

Common模块

任何依赖都先不用选,后续统一在pom.xml导入

删除无用文件:只保留src、.gitignore、pom.xml

src/main/java/·····内的启动类删除,src/test/java/····内的测试类删除

API模块、Web模块、Service模块和DAO模块

添加方法跟Common模块一样、依次添加即可。

仅web模块要保留启动类和测试类

添加完成如图:

删除无用文件如图:

3.配置父项目构建

在项目的根目录下的 pom.xml 文件中配置 Maven 构建,指定各个模块的依赖关系和构建顺序。

父项目pom.xml:

需要清理无用配置

设置打包方式为pom

导入子模块

完整pom.xml如下:

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 https://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>3.2.5</version>
        <relativePath/>
    </parent>
    <groupId>com.mijiu</groupId>
    <artifactId>springboot-modules-template</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-modules-template</name>
    <description>springboot-modules-template</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <!--设置打包方式为pom-->
    <packaging>pom</packaging>

    <!--子模块-->
    <modules>
        <module>common</module>
        <module>api</module>
        <module>service</module>
        <module>dao</module>
        <module>web</module>
    </modules>

   <!--依赖的子模块-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.mijiu</groupId>
                <artifactId>common</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.mijiu</groupId>
                <artifactId>api</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.mijiu</groupId>
                <artifactId>service</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.mijiu</groupId>
                <artifactId>dao</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>com.mijiu</groupId>
                <artifactId>web</artifactId>
                <version>0.0.1-SNAPSHOT</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

4.配置Web模块构建

  • web模块继承父项目
  • web模块依赖service模块
  • web模块需要spring boot web组件

pom.xml:

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 继承父包 -->
    <parent>
        <groupId>com.mijiu</groupId>
        <artifactId>springboot-modules-template</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>


    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>web</name>
    <description>web</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        
        <!-- web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 引入service模块 -->
        <dependency>
            <groupId>com.mijiu</groupId>
            <artifactId>service</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

5.配置Service模块构建

  • service模块继承父项目
  • service模块依赖dao模块

pom.xml:

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 继承父包 -->
    <parent>
        <groupId>com.mijiu</groupId>
        <artifactId>springboot-modules-template</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service</name>
    <description>service</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- 引入dao模块 -->
        <dependency>
            <groupId>com.mijiu</groupId>
            <artifactId>dao</artifactId>
        </dependency>
    </dependencies>
    
</project>

6.配置DAO模块构建

  • dao模块继承父项目
  • dao模块依赖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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 继承父包 -->
    <parent>
        <groupId>com.mijiu</groupId>
        <artifactId>springboot-modules-template</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>dao</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>dao</name>
    <description>dao</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- 引入common模块 -->
        <dependency>
            <groupId>com.mijiu</groupId>
            <artifactId>common</artifactId>
        </dependency>
    </dependencies>

</project>

7.配置API模块构建

  • api模块继承父项目
  • api模块依赖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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 继承父包 -->
    <parent>
        <groupId>com.mijiu</groupId>
        <artifactId>springboot-modules-template</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>api</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>API</name>
    <description>API</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>
        <!-- 引入common模块 -->
        <dependency>
            <groupId>com.mijiu</groupId>
            <artifactId>common</artifactId>
        </dependency>
    </dependencies>

</project>

8.配置Common模块构建

  • 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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 继承父包 -->
    <parent>
        <groupId>com.mijiu</groupId>
        <artifactId>springboot-modules-template</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>common</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>common</name>
    <description>common</description>
    <properties>
        <java.version>17</java.version>
    </properties>

    <dependencies>

    </dependencies>



</project>

9.启动类位置修改

再次强调只有web模块保留启动类和测试类!

原位置

修改后

10.编写测试接口

java 复制代码
package com.mijiu.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @RequestMapping("/hello")
    public String hello() {
        return "Hello World!";
    }
}

11.打包测试

在此之前一定保证仅web模块保留启动类和测试类,其他模块一律删除。

打包成功

12.启动项目测试接口

在web模块的启动类启动项目

启动成功

测试接口

写在最后

spring boot3多模块项目工程搭建基础搭建到这里就结束了。任何问题评论区或私信讨论,欢迎指正。

相关推荐
天天扭码14 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶14 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺19 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
小曲程序26 分钟前
vue3 封装request请求
java·前端·typescript·vue
陈王卜44 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、44 分钟前
Spring Boot 注解
java·spring boot
午觉千万别睡过1 小时前
RuoYI分页不准确问题解决
spring boot
java亮小白19971 小时前
Spring循环依赖如何解决的?
java·后端·spring
飞滕人生TYF1 小时前
java Queue 详解
java·队列
2301_811274311 小时前
大数据基于Spring Boot的化妆品推荐系统的设计与实现
大数据·spring boot·后端