網站首頁 編程語言 正文
最全SpringBoot項目多模塊開發詳解,看這篇就夠了
一、為什么使用
1.為什么要多模塊開發?
使用java技術開發項目的時候,隨著項目的不斷發展,需求的不斷更新,代碼越來越多,包結構也越來越復雜,就會遇到很多問題:
- 不同方面的代碼之間相互耦合,這時候一系統出現問題很難定位到問題的出現原因,即使定位到問題也很難修正問題,可能在修正問題的時候引入更多的問題。
- 多方面的代碼集中在一個整體結構中,新入的開發者很難對整體項目有直觀的感受,增加了新手介入開發的成本,需要有一個熟悉整個項目的開發者維護整個項目的結構(通常在項目較大且開發時間較長時這是很難做到的)
- 開發者對自己或者他人負責的代碼邊界很模糊,這是復雜項目中最容易遇到的,導致的結果就是開發者很容易修改了他人負責的代碼且代碼負責人還不知道,責任追蹤很麻煩。
將一個復雜項目拆分成多個模塊是解決上述問題的一個重要方法,多模塊的劃分可以降低代碼之間的耦合性(從類級別的耦合提升到jar包級別的耦合),每個模塊都可以是自解釋的(通過模塊名或者模塊文檔),模塊還規范了代碼邊界的劃分,開發者很容易通過模塊確定自己所負責的內容。
2.拆分規則
- 按業務模塊劃分: 將一個大型系統按照不同的業務模塊進行劃分,每個模塊可以獨立開發、測試、部署和維護。比如,對于一個電商系統,可以將商品管理、訂單管理、用戶管理等業務模塊單獨拆分成不同的子模塊。
- 按功能模塊劃分: 將一個系統按照不同的功能模塊進行劃分,每個模塊負責完成一個特定的功能,比如認證、授權、緩存、搜索等。
- 按技術組件劃分: 將一個系統按照不同的技術組件進行劃分,每個模塊可以包含一個或多個技術組件,比如數據庫連接、消息隊列、緩存框架等。
- 按層次劃分: 將一個系統按照不同的層次進行劃分,每個模塊可以包含一個或多個層次,比如數據訪問層、服務層、控制層等。
- 混合劃分: 可以將上述的任意兩種或多種方式結合起來使用,以達到更好的代碼復用、可維護性和可擴展性。
二、pom.xml常見配置
dependencyManagement
為了保持模塊間依賴統一,在父模塊中使用dependencyManagement預定義所有模塊需要用到的dependency(依賴),然后,子model根據實際需要引入parent中預定義的依賴
好處:
1、依賴統一管理(parent中定義,需要變動dependency版本,只要修改一處即可);
2、代碼簡潔(子model只需要指定groupId、artifactId即可)
3、dependencyManagement只會影響現有依賴的配置,但不會引入依賴,即子model不會繼承parent中dependencyManagement所有預定義的depandency,只引入需要的依賴即可,簡單說就是“按需引入依賴”或者“按需繼承”;因此,在parent中嚴禁直接使用depandencys預定義依賴,壞處是子model會自動繼承depandencys中所有預定義依賴;
packaging
packaging默認類型jar類型,如果不做配置,maven會將該項目打成jar包。常見項目的打包類型:pom、jar、war:
pom ---------> 父類型都為pom類型
jar ---------> 內部調用或者是作服務使用
war ---------> 需要部署的項目(一般web相關)
小結:父級項目里packaging打包方式一般配置成pom,pom 表示項目里沒有java代碼,也不執行任何代碼,只是為了聚合工程或傳遞依賴用的。
modules
管理子項目
build
在SpringBoot項目的pom.xml文件中,元素用于定義項目的構建配置,主要包括插件和資源過濾等配置。出現在pom.xml的頂層元素中,是一個重要的構建配置區。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<resources>
<resource>
<filtering>true</filtering>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
SpringBoot項目通常需要的配置有:
- 編譯插件:maven-compiler-plugin
- 打包插件:spring-boot-maven-plugin
- 資源過濾配置
- 插件管理配置
三、主要步驟
1.創建父項目
最后生成的文件中只有pom.xml .idea .iml文件沒有src目錄,自行刪除
2.新建Module–子項目(service,dao,commons,web,api)
選擇maven構建
3.編輯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>
<groupId>com.dmk</groupId>
<artifactId>boot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot-parent</name>
<!--父模塊的打包方式-->
<packaging>pom</packaging>
<description>boot-parent</description>
<!--parent 指明繼承關系,給出繼承的項目具體信息-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.13</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<modules>
<module>boot-web</module>
<module>boot-api</module>
<module>boot-commons</module>
<module>boot-dao</module>
<module>boot-service</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.dmk</groupId>
<artifactId>boot-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dmk</groupId>
<artifactId>boot-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dmk</groupId>
<artifactId>boot-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dmk</groupId>
<artifactId>boot-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.dmk</groupId>
<artifactId>boot-commons</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子項目中(service)
<?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>
<groupId>com.dmk</groupId>
<artifactId>boot-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>boot-service</name>
<description>boot-service</description>
<parent>
<groupId>com.dmk</groupId>
<artifactId>boot-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.dmk</groupId>
<artifactId>boot-dao</artifactId>
</dependency>
</dependencies>
</project>
4.啟動類
建議將啟動類只保留web模塊中
5.application.yml文件
只在web模塊中的application.yml中添加配置信息
6.打包測試
原文鏈接:https://blog.csdn.net/m0_73625251/article/details/136451396
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-08-10 詳細聊一聊algorithm中的排序算法_C 語言
- 2022-10-03 Docker容器/bin/bash?start.sh無法找到not?found問題解決_docker
- 2022-07-22 CSS設置元素隱藏的4種方法
- 2023-07-07 JdbcTemplate基本使用
- 2023-04-03 PyTorch加載模型model.load_state_dict()問題及解決_python
- 2022-07-03 c語言中的二級指針做函數參數說明_C 語言
- 2022-09-22 lex yacc與C++編寫代碼解析字符串代碼示例
- 2022-11-05 一篇文章說清楚?go?get?使用私有庫的方法_Golang
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支