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

⛰️个人主页:     蒾酒

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


目录

写在前面

多模块结构优缺点

模块介绍

Common 模块:

API 模块:

Web 模块:

Service 模块:

DAO 模块:

搭建步骤

1.创建 父Maven 项目

2.添加各模块

3.配置父项目构建

4.配置Web模块构建

5.配置Service模块构建

6.配置DAO模块构建

7.配置API模块构建

8.配置Common模块构建

9.启动类位置修改

10.编写测试接口

11.打包测试

 12.启动项目测试接口

写在最后 


写在前面

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

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

多模块结构优缺点

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

优点

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

缺点

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

模块介绍

  1. Common 模块

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

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

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

    • 职责:Service 模块包含应用程序的业务逻辑,负责处理业务规则和数据处理。
    • 功能:
      • 实现应用程序的业务逻辑。
      • 调用 DAO 模块提供的数据访问接口进行数据库操作。
      • 处理事务管理。
  5. 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 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 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 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 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 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 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.编写测试接口

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多模块项目工程搭建基础搭建到这里就结束了。任何问题评论区或私信讨论,欢迎指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解分布式事务⑨ ---->MySQL 事务的实现原理 之 MySQL 中的XA 事务(基本原理、流程分析、事务语法、简单例子演示)详解

目录 MySQL 事务的实现原理 之 MySQL 中的XA 事务&#xff08;基本原理、流程分析、事务语法、简单例子演示&#xff09;详解MySQL 中的 XA 事务1、XA 事务的基本原理1-1&#xff1a;XA 事务模型图&#xff1a;1-2&#xff1a;XA 事务模型的两阶段提交操作&#xff1a;Prepare …

Stable Diffusion webUI 最全且简单配置指南

Stable Diffusion webUI 配置指南 本博客主要介绍部署Stable Diffusion到本地&#xff0c;生成想要的风格图片。 文章目录 Stable Diffusion webUI 配置指南1、配置环境&#xff08;1&#xff09;pip环境[可选]&#xff08;2&#xff09;conda环境[可选] 2、配置Stable Diffu…

Jenkins docker部署springboot项目

1、创建jenkins容器 1&#xff0c;首先&#xff0c;我们需要创建一个 Jenkins 数据卷&#xff0c;用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷&#xff1a; docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷&#xff1a; docker run -dit…

Leetcode—422. 有效的单词方块【简单】Plus

2024每日刷题&#xff08;126&#xff09; Leetcode—422. 有效的单词方块 实现代码 class Solution { public:bool validWordSquare(vector<string>& words) {int row words.size();for(int i 0; i < row; i) {// 当前这一行的列数int col words[i].length(…

Java高阶私房菜:JVM性能优化案例及讲解

目录 核心思想 优化思考方向 压测环境准备 堆大小配置调优 调优前 调优后 分析结论 垃圾收集器配置调优 调优前 调优后 分析结论 JVM性能优化是一项复杂且耗时的工作&#xff0c;该环节没办法一蹴而就&#xff0c;它需要耐心雕琢&#xff0c;逐步优化至理想状态。“…

驾校考试宝典vip一点通驾考精简500题科目一四速记口诀c1答题技巧

下载地址&#xff1a;驾校考试宝典vip一点通驾考精简500题科目一四速记口诀c1答题技巧.zip 这份速记口诀考点总结 评分标准 和答题技巧&#xff0c;很详细&#xff0c;全科目速记口诀秘笈.pdf

QT中的容器

Qt中的容器 关于Qt中的容器类&#xff0c;下面我们来进行一个总结&#xff1a; Qt的容器类比标准模板库&#xff08;STL&#xff09;中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的&#xff0c;而且他们进行了速度和存储的优化&#xff0c;因此可以减少可…

mysql 指定根目录 迁移根目录

mysql 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、初始化mysql前就手动指定mysql根目录为一个大的分区(支持动态扩容)&#xff0c;事前就根本上解决mysql根目录空间不够问题3.1.0、方法思路3.1.1、卸载mariadb3.1.2、下载Mysql安装包3.1.3、安装Mysql 8.353…

TouchGFX 总结

文章目录 使用中文字体多屏幕间交换数据UI to MCUMCU to UI API文档参考横竖屏切换 使用中文字体 添加一个textArea&#xff0c;默认的英文文本可见&#xff0c;输入中文字体后就看不见了&#xff0c;是因为这个默认的字体不支持中文&#xff0c;改一下字体就可以了&#xff1…

全方位解析Node.js:从模块系统、文件操作、事件循环、异步编程、性能优化、网络编程等高级开发到后端服务架构最佳实践以及Serverless服务部署指南

Node.js是一种基于Chrome V8引擎的JavaScript运行环境&#xff0c;专为构建高性能、可扩展的网络应用而设计。其重要性在于革新了后端开发&#xff0c;通过非阻塞I/O和事件驱动模型&#xff0c;实现了轻量级、高并发处理能力。Node.js的模块化体系和活跃的npm生态极大加速了开发…

网络基础-网络设备介绍

本系列文章主要介绍思科、华为、华三三大厂商的网络设备 网络设备 网络设备是指用于构建和管理计算机网络的各种硬件设备和设备组件。以下是常见的网络设备类型&#xff1a; 路由器&#xff08;Router&#xff09;&#xff1a;用于连接不同网络并在它们之间转发数据包的设备…

深入理解网络原理2----UDP协议

文章目录 前言一、UDP协议协议段格式&#xff08;简图&#xff09;校验和 二、UDP与TCP 前言 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同⼯作来完成业务&#xff0c;就有了⽹络互连。 一、UDP协议 协…

java发送请求-http和https

http和https区别 1、http是网络传输超文本协议&#xff0c;client---- http------ server 2、httpshttpssl证书&#xff0c;让网络传输更安全 &#xff0c;client---- httpssl------ server 3、ssl证书是需要客户端认可的&#xff0c;注意官方证书和jdk生成的证书的用户来使…

【Github】将github仓库作为图床使用

创建github仓库 首先创建一个github仓库专门用于存储图片&#xff0c;具体步骤如下&#xff1a; 1.点击新的仓库按钮 2.初始配置&#xff1a;随便填写一个仓库名&#xff1b;这里的仓库状态一定要是public公开的&#xff0c;不然后面访问不了图片 下载PicGo PicGo官网 在A…

获取淘宝商品销量数据接口

淘宝爬虫商品销量数据采集通常涉及以下几个步骤&#xff1a; 1、确定采集目标&#xff1a;需要明确要采集的商品类别、筛选条件&#xff08;如天猫、价格区间&#xff09;、销量和金额等数据。例如&#xff0c;如果您想了解“小鱼零食”的销量和金额&#xff0c;您需要设定好价…

【面试经典 150 | 数组】文本左右对齐

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

C语言 | Leetcode C语言题解之第61题旋转链表

题目&#xff1a; 题解&#xff1a; struct ListNode* rotateRight(struct ListNode* head, int k) {if (k 0 || head NULL || head->next NULL) {return head;}int n 1;struct ListNode* iter head;while (iter->next ! NULL) {iter iter->next;n;}int add n…

【LeetCode刷题记录】230. 二叉搜索树中第K小的元素

230 二叉搜索树中第K小的元素 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1 输出&#xff1…

屏蔽罩材质和厚度对屏蔽效能的影响

​ 一&#xff0e;屏蔽效能的影响因素 屏蔽效能的影响因素主要有两个方面&#xff1a;屏蔽材料的特性和厚度&#xff1b;如下图所示&#xff0c;电磁波经过不同媒介时&#xff0c;会在分界面形成反射&#xff0c;穿过界面的电磁波一部分被反射回去&#xff0c;这部分能量损失…

音视频开发之旅——实现录音器、音频格式转换器和播放器(PCM文件转换为WAV文件、使用LAME编码MP3文件)(Android)

本文主要讲解的是实现录音器、音频转换器和播放器&#xff0c;在实现过程中需要把PCM文件转换为WAV文件&#xff0c;同时需要使用上一篇文章交叉编译出来的LAME库编码MP3文件。本文基于Android平台&#xff0c;示例代码如下所示&#xff1a; AndroidAudioDemo Android系列&am…