SpringBoot - 多模組專案的搭建教程
在IDEA中搭建SpringBoot多模組專案的過程。
框架選定為SpringBoot+Mybatis
1、建立父工程
點選下一步
填寫專案名稱後 —選擇java Version-------點選下一步
不要選擇任何—點選下一步
選擇專案存放位置 -----點選完成
刪除剛建立工程裡不需要的檔案, 只保留:.idea 資料夾 、專案 pom 檔案、以及一個 *.iml 檔案。
2.建立子工程
(1)右鍵點選父工程,選擇 New -> Module… 建立子模組。這裡依次建立 broker-base、broker-dao、broker-service 和 broker-web 共 4 個模組。
注意:除了 broker-web 子模組建立時選擇新增 Spring Web 依賴
(當然也可以建立時不新增,等後面再手動編輯 pom.xml 檔案新增),其他模組暫時不新增依賴。
點選下一步
填寫專案名稱點選下一步
點選下一步
點選完成
broker-dao、broker-service 建立方法相同
broker-web
注意:除了 broker-web 子模組建立時選擇新增 Spring Web 依賴
(當然也可以建立時不新增,等後面再手動編輯 pom.xml 檔案新增),其他模組暫時不新增依賴。
(2)將 4 個子模組的 mvnw、mvnw.cmd 檔案及 .mvn 資料夾全部刪除。
(3)對於 src 裡的內容,只保留 hangge-web 的啟動類和配置檔案,其他子模組的的啟動類和配置檔案都刪除:
3,編輯父工程 pom.xml 檔案
將父工程 pom.xml 檔案修改成如下內容,裡面宣告該父工程包含的子模組,同時抽取統一的配置資訊和依賴版本控制,這樣可以方便子 pom 直接引用,簡化子 pom 的配置。
多模組專案中,父模組打包型別必須是 pom。
因為開發框架是 spring boot,父模組預設繼承 spring-boot-starter-parent,因此可以刪除 spring-boot-starter 和 spring-boot-starter-test 依賴(祖先已經包含了)
<?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>
<packaging>pom</packaging>
<modules>
<module>broker-base</module>
<module>broker-dao</module>
<module>broker-service</module>
<module>broker-web</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>broker</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>broker</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<!-- 版本說明:這裡統一管理依賴的版本號 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
4,編輯子模組 pom.xml 檔案
(1)子模組 broker-base 的 pom.xml 檔案內容如下,其中 parent 要使用頂層的父模組,同時由於我們專案用到了 Lombok ,所以還新增了 lombok 依賴:
注意:由於子模組的配置資訊會繼承父模組的,所以子模組原來的 properties 可刪掉。
<?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.example</groupId>
<artifactId>broker-base</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>broker-base</name>
<description>Demo project for Spring Boot</description>
<!-- 繼承本專案的父工程 -->
<parent>
<groupId>com.example</groupId>
<artifactId>broker</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
</dependencies>
</project>
(2)子模組 broker-dao 的 pom.xml 檔案內容如下,同樣 parent 要使用頂層的父模組,並新增 broker-base 子模組,以及資料庫相關依賴:
<?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.example</groupId>
<artifactId>broker-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hangge-dao</name>
<description>Demo project for Spring Boot</description>
<!-- 繼承本專案的父工程 -->
<parent>
<groupId>com.example</groupId>
<artifactId>broker</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- dao 子模組又依賴 base 子模組 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-base</artifactId>
</dependency>
<!-- Spring Data JPA 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- 資料庫驅動依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 資料庫連線池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.9</version>
</dependency>
</dependencies>
</project>
(3)子模組 broker-service 的 pom.xml 檔案內容如下,同樣 parent 要使用頂層的父模組,並新增 broker-dao 子模組依賴:
<?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.example</groupId>
<artifactId>broker-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hangge-service</name>
<description>Demo project for Spring Boot</description>
<!-- 繼承本專案的父工程 -->
<parent>
<groupId>com.example</groupId>
<artifactId>broker</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- service 子模組又依賴 dao 子模組 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-dao</artifactId>
</dependency>
</dependencies>
</project>
(4)子模組 broker-web 的 pom.xml 檔案內容如下,同樣 parent 要使用頂層的父模組,並新增 broker-service 子模組依賴:
注意: 之前建立這個子模組的時候已經新增了 spring-boot-starter-web 依賴,如果沒有則手動新增。
<?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.example</groupId>
<artifactId>broker-web</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>broker-web</name>
<description>Demo project for Spring Boot</description>
<!-- 繼承本專案的父工程 -->
<parent>
<groupId>com.example</groupId>
<artifactId>broker</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<!-- web 子模組又依賴 service 子模組 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>broker-service</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
5,移動專案啟動類所在的包
(1)目前專案啟動類 BrokerWebApplication在com.example.brokerweb包下面,我們需要將其移動移動到 com.example 包下。
如果不移動啟動類的話,在多模組專案中會可能會碰到一個模組無法通過
@Autowired 注入其他模組裡的物件的問題。啟動時會報類似如下的錯誤:
Field bookService in com.example.hanggeweb.controller.
HelloController required a bean of type 'com.example.brokerservice.BookService' that could not be found.
(2)移動的方式就是右鍵點選 BrokerWebApplication選擇 Refactor -> Move…
6,開始編碼
建立一個broker資料庫 並建立一個book表
/*
Navicat Premium Data Transfer
Source Server : 本地MySQL
Source Server Type : MySQL
Source Server Version : 50728
Source Host : localhost:3306
Source Schema : broker
Target Server Type : MySQL
Target Server Version : 50728
File Encoding : 65001
Date: 02/12/2020 11:31:23
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for book
-- ----------------------------
DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`price` float(10, 2) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of book
-- ----------------------------
INSERT INTO `book` VALUES (1, '1', '1', 1.00);
SET FOREIGN_KEY_CHECKS = 1;
(1)首先在broker-dao 模組中新增一個 Book 實體類:
package com.example.brokerdao;
import lombok.Getter;
import lombok.Setter;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity(name = "book")
@Setter
@Getter
@NoArgsConstructor
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
private String author;
private Float price;
}
(2)接著在 broker-dao 模組中新增 BookDao 介面,繼承 JpaRepository:
package com.example.brokerdao;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BookDao extends JpaRepository<Book, Integer> {
}
(3)接著在 broker-service 模組中新增一個業務實現類 BookService,注入 BookDao 並呼叫:
package com.example.brokerservice;
import com.example.brokerdao.Book;
import com.example.brokerdao.BookDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BookService {
@Autowired
BookDao bookDao;
public List<Book> allBooks() {
return bookDao.findAll();
}
}
4)然後在 broker-web 模組中建立一個 Controller,注入 BookService 並呼叫:
package com.example.brokerweb;
import com.example.brokerdao.Book;
import com.example.brokerservice.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/broker")
public class HelloWoreldController {
@Autowired
BookService bookService;
@GetMapping("test")
public List<Book> test() {
return bookService.allBooks();
}
}
(5)最後在 broker-web 模組的 application.properties 中配置資料庫基本資訊以及 JPA 相關配置:
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/broker?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
#是否在控制檯列印JPA執行過程生成的SQL
spring.jpa.show-sql=true
#表示JPA對應的資料庫是MySQL
spring.jpa.database=mysql
#表示在專案啟動時根據實體類更新資料庫中的表
spring.jpa.hibernate.ddl-auto=update
#表示使用的資料庫方言是MySQL57Dialect
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL57Dialect
7,執行測試
(1)執行 broker-web 模組下的 Application 的啟動類:
(2)使用瀏覽器訪問http://localhost:8080/broker/test便可查詢到相關的資料資訊:
相關文章
- IDEA建立SpringBoot的多模組專案教程IdeaSpring Boot
- Spring Boot + MyBatis 多模組專案搭建教程Spring BootMyBatis
- springboot多模組專案搭建遇到的問題記錄Spring Boot
- Springboot建立maven多模組專案Spring BootMaven
- 如何構建多模組的SpringBoot專案Spring Boot
- springboot模組化開發專案搭建Spring Boot
- SpringBoot多模組專案中無法注入其他模組中的spring beanSpring BootBean
- SpringBoot學習日記(二)多模組專案Spring Boot
- Jenkins自動化部署SpringBoot多模組專案JenkinsSpring Boot
- SpringBoot + maven 父子模組專案搭建Spring BootMaven
- vue多專案多模組執行/打包Vue
- SpringBoot專案搭建Spring Boot
- springboot-多模組構建Spring Boot
- 使用SpringBoot搭建Web專案Spring BootWeb
- 將maven專案劃分為多個模組Maven
- IDEA_IDEA下構建多模組專案Idea
- Android 日誌工具:專案模組較多時的救星Android
- 【Java】【Gradle】Gradle構建SpringBoot專案,Gradle模組化管理JavaGradleSpring Boot
- Swift 專案的模組化Swift
- springboot 多模組下的單元測試配置Spring Boot
- springBoot快速搭建啟動專案Spring Boot
- 初試Docker 搭建SpringBoot 專案DockerSpring Boot
- Maven中如何管理多模組專案的依賴關係Maven
- Maven 高階篇之構建多模組專案的方法Maven
- eclipse中基於maven構建多模組專案EclipseMaven
- Spring Boot + Maven 多模組專案開發詳解Spring BootMaven
- IDEA匯入SpringBoot專案教程IdeaSpring Boot
- Java技術分享:SpringBoot多模組開發JavaSpring Boot
- springboot+vue前後端分離專案-專案搭建11-1對多查詢Spring BootVue後端
- SpringBoot + ES基本專案搭建例項Spring Boot
- IDEA建立SpringBoot專案(詳細教程)IdeaSpring Boot
- 利用IDEA建立gradle構建的Java多模組專案(太清晰了)IdeaGradleJava
- maven 多模組專案的測試覆蓋率分析 - jacoco 聚合分析Maven
- 搭建基於springboot的dubbo專案踩坑記Spring Boot
- spring cloud多模組專案框架搭建-整合SLF4J和log4j日誌元件SpringCloud框架元件
- springboot+vue前後端分離專案-vue專案搭建Spring BootVue後端
- Go 1.18 新特性多模組工作區教程-讓多模組開發變得簡單Go
- Angular專案中共享模組的實現Angular