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的使用经验。
多模块结构优缺点
多模块项目将代码分成多个子模块,每个模块可以单独构建和管理。通常适用于大型项目或团队,以及那些希望将不同的功能或服务进行解耦的场景。
优点
- 模块化:代码解耦,每个模块负责特定的功能,易于维护。
- 团队协作:不同的团队可以在不同的模块上工作,减少冲突。
- 重用性:可以将模块打包成共享库,供其他项目使用。
缺点
- 复杂性:项目结构更复杂,构建和部署过程可能需要更多配置。
- 管理难度:需要更多的协调和沟通,以确保模块之间的兼容性。
模块介绍
-
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 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多模块项目工程搭建基础搭建到这里就结束了。任何问题评论区或私信讨论,欢迎指正。
相关文章:

spring boot3多模块项目工程搭建-上(团队开发模板)
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 多模块结构优缺点 模块介绍 Common 模块: API 模块: Web 模块: Service 模块: DAO 模块: 搭建步骤 1.创建 父…...

人脸美型SDK解决方案,适用于各类应用场景
视频内容已经成为企业宣传、产品展示、互动直播等多个领域的核心载体。而在这些场景中,高质量的人脸美型效果不仅能够提升用户体验,更能为品牌加分。美摄科技凭借深厚的技术积累和行业洞察,推出了全新的人脸美型SDK解决方案,为企业…...

RS2103XH 功能和参数介绍及规格书
RS2103XH 是一款单刀双掷(SPDT)模拟开关芯片,主要用于各种模拟信号的切换和控制。下面是一些其主要的功能和参数介绍: 主要功能特点: 模拟信号切换:能够连接和断开模拟信号路径,提供灵活的信号路…...

nn.TransformerEncoderLayer详细解释,使用方法!!
nn.TransformerEncoderLayer nn.TransformerEncoderLayer 是 PyTorch 的 torch.nn 模块中提供的一个类,用于实现 Transformer 编码器的一个单独的层。Transformer 编码器层通常包括一个自注意力机制和一个前馈神经网络,中间可能还包含层归一化ÿ…...

巨控GRM561/562/563/564Q杀菌信息远程监控
摘要 通过程序编写、手机APP画面制作等运行系统,实现电脑及手机APP显示的历史曲线画面和数据图形化的实时性。 不仅流程效率提升90%以上,同时为杀菌生产提供有利的质量保障,还有效规避因触屏及内存卡的突发异常导致历史数据的丢失࿰…...

RT-DETR-20240507周更说明|更新Inner-IoU、Focal-IoU、Focaler-IoU等数十种IoU计算方式
RT-DETR改进专栏|包含主干、模块、注意力、损失函数等改进 专栏介绍 本专栏包含模块、卷积、检测头、损失等深度学习前沿改进,目前已有改进点70!每周更新。 20240507更新说明: ⭐⭐ 更新CIoU、DIoU、MDPIoU、GIoU、EIoU、SIoU、ShapeIou、PowerfulIoU、…...

Web3:下一代互联网的科技进化
随着科技的不断演进,互联网已经成为了我们生活中不可或缺的一部分。而在Web3时代,我们将会见证互联网进化的下一个阶段。本文将探讨Web3作为下一代互联网的科技进化,以及它所带来的重要变革和影响。 传统互联网的局限性 传统互联网存在诸多…...

SQL注入-基础知识
目录 前言 一,SQL注入是什么 二,SQL注入产生的条件 三,学习环境介绍 四、SQL注入原理 五,SQL中常用的函数 六,关于Mysql数据库 前言 在网络安全领域中,sql注入是一个无法被忽视的关键点,…...
npx 有什么作用跟意义?为什么要有 npx?什么场景使用?
npx 是 npm 从 v5.2.0 开始新增了 npx 命令,> 该版本会自动安装 npx,如果不能使用就手动安装一下: $ npm install -g npxnpx 的作用 npm 只能管理包的依赖,npx 则可以快捷的运用包中的命令行工具和其他可执行文件,…...

Docker搭建LNMP+Wordpress
目录 一.项目模拟 1.项目环境 2.服务器环境 3.任务需求 (1)使用 Docker 构建 LNMP 环境并运行 Wordpress 网站平台 (2)限制 Nginx 容器最多使用 500MB 的内存和 1G 的 Swap (3)限制 Mysql 容器写 /d…...
PCIE相关总结
1、概述 "PCIE 槽位" 指的是主板上的 Peripheral Component Interconnect Express (外围设备互联扩展)槽位。它是用于连接扩展卡(如显卡、网卡、声卡等)到主板的接口。PCI Express 是一种高速串行扩展总线标准ÿ…...

OpenCV 入门(五) —— 人脸识别模型训练与 Windows 下的人脸识别
OpenCV 入门系列: OpenCV 入门(一)—— OpenCV 基础 OpenCV 入门(二)—— 车牌定位 OpenCV 入门(三)—— 车牌筛选 OpenCV 入门(四)—— 车牌号识别 OpenCV 入门…...
C++基础-编程练习题2
文章目录 前言一、查找“支撑数”二、数组元素的查找三、爬楼梯四、数字交换五、找高于平均分的人 前言 C基础-编程练习题和答案 一、查找“支撑数” 【试题描述】 在已知一组整数中, 有这样一种数非常怪, 它们不在第一个, 也不在最后一个&…...

Linux下GraspNet复现流程
Linux,Ubuntu中GraspNet复现流程 文章目录 Linux,Ubuntu中GraspNet复现流程1.安装cuda和cudnn2.安装pytorch3.编译graspnetAPIReference 🚀非常重要的环境配置🚀 ubuntu 20.04cuda 11.0.1cudnn v8.9.7python 3.8.19pytorch 1.7.0…...
Linux——MySQL5.7编译安装、RPM安装、yum安装
文章目录 Linux——MySQL5.7编译安装、RPM安装、yum安装一、编译安装二、RPM安装三、yum安装 Linux——MySQL5.7编译安装、RPM安装、yum安装 卸载mysql # 查看是否安装了mysql [rootcsq ~]# rpm -qa |grep mysql mysql-community-server-5.7.36-1.el7.x86_64 mysql-community-c…...

LSTM递归预测(matlab)
LSTM(长短期记忆)递归预测原理及步骤详解如下: LSTM递归预测(matlab)代码获取戳此处代码获取戳此处代码获取戳此处 一、LSTM递归预测原理 LSTM是一种特殊的递归神经网络(RNN),它能够…...

计算机网络 备查
OSI 七层模型 七层模型协议各层实现的功能 简要 详细 TCP/IP协议 组成 1.传输层协议 TCP 2.网络层协议 IP 协议数据单元(PDU)和 封装 数据收发过程 数据发送过程 1. 2.终端用户生成数据 3.数据被分段,并加上TCP头 4.网络层添加IP地址信息…...
查看软件包依赖关系
列出软件包依赖文件列表 rpm -ql 命令用于列出已安装软件包的文件列表。它显示软件包中包含的文件及其对应的路径。 具体来说,-q 选项表示查询已安装的软件包,而 -l 选项表示列出软件包中的文件列表。 例如,如果要查看已安装的 nginx 软件…...
C++ 中 strcmp(a,b) 函数的用法
【C 中 strcmp(a,b) 函数的用法】 ● 若 len(a)>len(b),则返回1。 ● 若 len(a)len(b),则返回0。 ● 若 len(a)<len(b),则返回-1。【C 中 strcmp(a,b) 函数的用法代码一】 #include <bits/stdc.h> using namespace std;int main…...

Servlet(一些实战小示例)
文章目录 一、实操注意点1.1 代码修改重启问题1.2 Smart Tomcat的日志1.3 如何处理错误 一. 抓自己的包二、构造一个重定向的响应,让页面重定向到百度主页三、让服务器返回一个html数据四、表白墙4.1 约定前后端数据4.2 前端代码4.3 后端代码4.4 保存在数据库的版本…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...