Spring Boot 項目新增 Module 完整指南

1. 模塊化開發的重要性

在軟件開發中,隨著項目規模的不斷擴大,??模塊化設計??已成為提高代碼可維護性和可復用性的關鍵實踐。通過將大型項目拆分為多個獨立模塊,開發團隊可以??并行開發??不同功能組件,降低代碼耦合度,并提高整體開發效率。Spring Boot框架提供了良好的支持,使開發者能夠輕松創建和管理多模塊項目。

模塊化開發允許每個模塊專注于特定業務功能或技術層面,例如將數據訪問層、業務邏輯層和Web層分離為獨立模塊。這種架構使得代碼組織更加清晰,測試更加方便,并且有利于團隊協作。

2. 創建父項目(Parent Project)

創建多模塊項目首先需要建立一個??父項目??作為整個項目的基礎容器。父項目不包含具體業務代碼,而是負責統一管理所有子模塊的依賴和配置。

2.1 初始化父項目

使用Spring Initializr創建父項目,選擇Maven作為構建工具,Java作為開發語言,并選擇最新的Spring Boot穩定版本。創建完成后,需要修改父項目的pom.xml文件:

<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.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><modules><module>moduleA</module><module>moduleB</module></modules><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

關鍵配置說明:

? ??packaging類型??:必須設置為pom,表示這是一個父項目

? modules標簽??:包含所有子模塊的列表

? ??parent標簽??:繼承Spring Boot官方父項目,獲得默認配置

2.2 清理父項目結構

由于父項目不包含實際代碼,需要刪除不必要的文件和文件夾:

? 刪除.mvn文件夾和src目錄

? 刪除mvnw和mvnw.cmd文件

? 只保留pom.xml文件進行依賴管理

3. 新增子模塊(Module)

3.1 創建子模塊步驟

在父項目基礎上新增子模塊的流程如下:

  1. 在IDE中右鍵點擊父項目,選擇"New" → “Module”

  2. 選擇Spring Initializr作為模塊模板

  3. 設置子模塊的GroupId和ArtifactId(不要與父項目重復)

  4. 選擇所需的Spring Boot起步依賴

  5. 指定模塊名稱和存儲路徑

3.2 子模塊pom.xml配置

每個子模塊需要有獨立的pom.xml文件,配置如下:

<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><artifactId>moduleA</artifactId><packaging>jar</packaging><parent><groupId>com.example</groupId><artifactId>parent-project</artifactId><version>1.0-SNAPSHOT</version></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 其他模塊依賴 --><dependency><groupId>com.example</groupId><artifactId>common-module</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

子模塊配置要點:

? ??parent配置??:必須指向父項目

? packaging類型??:通常設置為jar

? 依賴聲明??:添加模塊特定需要的依賴

4. 模塊間的依賴管理

4.1 統一依賴管理

在父項目中可以統一管理所有子模塊的依賴版本,避免版本沖突:

<!-- 父項目pom.xml中 -->
<properties><java.version>17</java.version><lombok.version>1.18.30</lombok.version><mysql.version>8.0.33</mysql.version><!-- 統一管理項目版本號 --><parentProject.version>1.0-SNAPSHOT</parentProject.version>
</properties><dependencyManagement><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version</version></dependency></dependencies><!-- 子模塊版本管理 --><dependency><groupId>com.example</groupId><artifactId>moduleA</artifactId><version>${parentProject.version}</version></dependency>
</dependencyManagement>

4.2 模塊間依賴引用

一個模塊可以依賴其他模塊,只需在pom.xml中添加對應模塊的依賴:

<dependency><groupId>com.example</groupId><artifactId>moduleA</artifactId><version>1.0-SNAPSHOT</version>
</dependency>

這樣,moduleB就可以使用moduleA中定義的類和服務了。

5. 模塊配置與自定義屬性

5.1 模塊特定配置

每個模塊可以有自己獨立的配置文件(application.yml或application.properties),用于設置模塊特定的屬性:

# moduleA/src/main/resources/application.yml
server:port: 8081spring:datasource:url: jdbc:mysql://localhost:3306/moduleA_dbusername: rootpassword: passwordcustom:module:setting: value-specific-to-moduleA

5.2 跨模塊配置共享

使用Spring Boot的@ConfigurationProperties注解,可以創建能夠在多個模塊間共享的配置類:

// 在common模塊中定義
@Component
@ConfigurationProperties(prefix = "sky.aa")
@Data
public class AA {private String name;private String age;
}

在其他模塊中,只需在配置文件中設置相應屬性即可注入使用:

# 在使用模塊的application.yml中
sky:aa:name: zhanage: 12

這種機制使得配置能夠在模塊間共享和重用。

6. 代碼實現示例

6.1 創建模塊服務類

在每個模塊中,可以創建特定的服務類實現業務邏輯:

package com.example.moduleA;import org.springframework.stereotype.Service;@Service
public class MyService {public String getGreeting() {return "Hello from Module A!";}
}

6.2 創建REST控制器

package com.example.mymodule.controller;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api/hello")
public class HelloController {@GetMappingpublic String sayHello() {return "Hello from My Module!";}
}

6.3 主應用類

每個可獨立運行的模塊需要有自己的主應用類:

package com.example.moduleA;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}

7. 構建與測試

7.1 項目構建

使用Maven命令構建整個項目:

# 在父項目目錄下執行
mvn clean install

此命令會編譯所有模塊,運行測試,并安裝到本地Maven倉庫。

7.2 運行特定模塊

要運行特定模塊,可以進入模塊目錄并使用Spring Boot插件:

cd moduleA
mvn spring-boot:run

或者直接在IDE中運行模塊的主應用類。

7.3 測試模塊間依賴

在依賴其他模塊的模塊中,可以測試依賴是否正常工作:

import com.example.modulea.ServiceA;@Service
public class ServiceB {private final ServiceA serviceA;public ServiceB(ServiceA serviceA) {this.serviceA = serviceA;}public void performAction() {serviceA.action();}
}

8. 常見問題與解決方案

8.1 模塊無法識別問題

如果新模塊未被正確識別,檢查父pom.xml中的modules配置是否包含了新模塊,并確保子模塊的parent配置正確指向父項目。

8.2 依賴版本沖突

使用父項目中的dependencyManagement統一管理依賴版本,避免不同模塊使用不同版本的依賴庫。

8.3 配置不生效

確保模塊的配置文件放置在src/main/resources目錄下,并且配置屬性前綴與@ConfigurationProperties注解中設置的前綴一致。

8.4 類無法掃描問題

如果模塊中的組件未被Spring掃描到,檢查主應用類是否在包的根目錄下,或者使用@ComponentScan注解明確指定要掃描的包。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98563.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98563.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98563.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git cherry-pick 與分支重置技術實現代碼健全性保障下的提交記錄精簡

代碼健全性保障&#xff1a;上市審查中的 Git 提交記錄整理方案&#xff08;核心功能提交篩選流程&#xff09; 一、背景與目的 我司正處于上市籌備階段&#xff0c;券商需對核心系統進行 Git 代碼審查&#xff0c;并基于提交記錄生成測試報告。由于原始提交記錄包含大量細節性…

前后端聯調時出現的一些問題記錄

服務器的ip沒有設置成所有ip都能訪問的&#xff0c;或防火墻沒開跨域問題&#xff08;剛開始異源&#xff0c;有這個問題&#xff0c;主要是前端做一下配置代理&#xff0c;后端也可以配置跨域資源共享&#xff08;CORS&#xff09;&#xff09;Configuration public class Cor…

數字圖像處理-設計生成一個半球

1 實驗題目設計生成一個半球&#xff08;matlab&#xff09;。2 程序源代碼%Hemisphere clear,clc,close all %Sphere radius R1; %Set grid number n30; theta (-n:2:n)/n*pi; phi ([0,0:2:n])/n*pi/2; cosphi cos(phi); cosphi(1) 0; cosphi(end) 0; sintheta sin(thet…

mac M1上安裝windows虛擬機報錯

Parallels版本是18.0.02 mac&#xff1a;arm系統15.6.1 自動獲取windows11下載&#xff0c;安裝的時候報錯&#xff0c;藍屏&#xff0c;是因為安裝的版本不對&#xff0c;猜測原因應該是18.0.02不支持最新版的windows11&#xff0c;需要更新最新版的Parallels。 解決方案&am…

基于R語言機器學習方法在生態經濟學領域中的實踐技術應用

近年來&#xff0c;人工智能領域已經取得突破性進展&#xff0c;對經濟社會各個領域都產生了重大影響&#xff0c;結合了統計學、數據科學和計算機科學的機器學習是人工智能的主流方向之一&#xff0c;目前也在飛快的融入計量經濟學研究。表面上機器學習通常使用大數據&#xf…

第01章 初識MySQL與mysql8.0的安裝

初識 MySQL 文章目錄初識 MySQL引言一、數據庫基礎1.1 什么是數據庫1.2 表1.3 數據類型1.4 主鍵二、數據庫技術構成2.1 數據庫系統2.2 SQL 語言2.2.1 數據定義語言&#xff08;DDL&#xff09;2.2.2 數據操作語言&#xff08;DML&#xff09;2.2.3 數據查詢語言&#xff08;DQL…

【數據結構基礎習題】-1- 數據結構基本操作

一、順序表和鏈表習題 1. 順序表就地逆置#include <stdio.h> // 定義順序表結構 #define MAXSIZE 100 typedef struct {int data[MAXSIZE];int length; } SqList; // 就地逆置順序表 void reverseList(SqList *L) {int i, temp;for (i 0; i < L->length / 2; i) {…

【Java實戰?】從0到1:Spring Boot Web開發與接口設計實戰

目錄一、Spring Boot Web 基礎配置1.1 Web 起步依賴&#xff08;spring-boot-starter-web 導入與核心組件&#xff09;1.2 內置服務器配置&#xff08;Tomcat 端口、線程池、連接超時設置&#xff09;1.3 靜態資源訪問&#xff08;靜態資源存放路徑、自定義資源映射&#xff09…

房屋安全鑒定機構評價

房屋安全鑒定機構評價&#xff1a;如何選擇專業可靠的檢測服務在建筑行業快速發展的今天&#xff0c;房屋安全鑒定已成為保障建筑安全、預防事故的重要環節。面對市場上眾多的房屋安全鑒定機構&#xff0c;如何科學評價并選擇一家專業可靠的服務提供方&#xff0c;是許多業主、…

【算法專題訓練】19、哈希表

1、哈希表基礎知識 以鍵值對的方式進行數據存儲優點&#xff1a;哈希表數據結構在插入、刪除或查找一個元素時&#xff0c;都只需要O(1)的時間 哈希表設計三要點&#xff1a; 為了快速確定一個元素在哈希表中的位置&#xff0c;可以使用一個數組&#xff0c;元素的位置為他的…

某光伏電力監控系統網絡安全監測項目:智能組網技術優化方案實踐

背景與挑戰隨著光伏電力行業的快速發展&#xff0c;光伏電站的規模和分布范圍日益擴大。電力監控系統作為光伏電站的核心平臺&#xff0c;其網絡安全直接關系到電力生產的穩定性與可靠性。然而&#xff0c;光伏場站通常分布在偏遠地區&#xff0c;網絡環境復雜&#xff0c;傳統…

GEE訓練教程:基于Landsat 8衛星影像識別并提取指定區域內無云覆蓋的區域多邊形,最終導出為矢量文件

簡介 本文使用Google Earth Engine平臺,通過Landsat 8衛星影像識別并提取指定區域內無云覆蓋的區域多邊形,最終導出為矢量文件。主要步驟包括:定義研究區域、創建云檢測算法、篩選高質量影像、將無云區域轉換為矢量多邊形,并進行可視化檢查和數據導出。 使用Google Earth…

UniApp 頁面通訊方案全解析:從 API 到狀態管理的最佳實踐

在 UniApp 跨端開發中&#xff0c;組件與頁面間的通訊是核心需求。無論是父子組件交互、跨頁面數據傳遞&#xff0c;還是全局狀態共享&#xff0c;選擇合適的通訊方案直接影響代碼的可維護性和性能。本文將系統對比 uni.$emit 系列 API、狀態管理庫&#xff08;Vuex/Pinia&…

【c++進階系列】:萬字詳解AVL樹(附源碼實現)

&#x1f525; 本文專欄&#xff1a;c &#x1f338;作者主頁&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客勵志語錄&#xff1a; 路在腳下延伸時&#xff0c;不必追問終點何在。你邁出的每一步&#xff0c;都在重新定義世界的邊界 ★★★ 本文前置知識&#xff1a; …

前端日志回撈系統的性能優化實踐|得物技術

一、前言在現代前端應用中&#xff0c;日志回撈系統是排查線上問題的重要工具。然而&#xff0c;傳統的日志系統往往面臨著包體積過大、存儲無限膨脹、性能影響用戶體驗等問題。本文將深入分析我們在dw/log和dw/log-upload兩個庫中實施的關鍵性能優化&#xff0c;以及改造過程中…

【QT隨筆】結合應用案例一文完美概括QT中的隊列(Queue)

【QT隨筆】結合應用案例一文完美概括QT中的隊列&#xff08;Queue&#xff09; 隊列&#xff08;Queue&#xff09;是一種線性數據結構&#xff0c;其核心規則為先進先出&#xff08;FIFO, First-In-First-Out&#xff09;&#xff1a; 新元素在隊尾插入&#xff08;enqueue&a…

At least one <template> or <script> is required in a single file component

環境rspack vue3原因rule 中配置了兩個vue-loader刪掉一個即可。

LangChain實戰(十八):構建ReAct模式的網頁內容摘要與分析Agent

本文是《LangChain實戰課》系列的第十八篇,將深入講解如何構建一個基于ReAct模式的智能網頁內容摘要與分析Agent。這個Agent能夠自主瀏覽網頁、提取關鍵信息、生成智能摘要,并進行深入的內容分析,讓信息獲取和理解變得更加高效。 前言 在信息爆炸的時代,我們每天都需要處理…

debian11 ubuntu24 armbian24 apt install pure-ftpd被動模式的正確配置方法

debian11 ubuntu24 armbian24 apt install pure-ftpd被動模式的正確配置方法 安裝方法請看&#xff1a;https://www.itbulu.com/pure-ftpd.html 疑難問題解決 原本以為配置很簡單的&#xff0c;無非是修改 ForcePassiveIP MinUID PassivePortRange PureDB這幾個配置項就行了…

量化金融|基于算法和模型的預測研究綜述

一、研究背景與發展歷程??1.??量化投資理論演進???奠基階段&#xff08;1950s-1960s&#xff09;??&#xff1a;Markowitz均值方差理論&#xff08;1952&#xff09;、CAPM模型&#xff08;1964&#xff09;奠定現代量化投資基礎?衍生品定價&#xff08;1970s-1980s&…