SpringBoot中項目結構的項目實踐
技術背景
Spring Boot項目結構遵循Maven或Gradle的標準目錄結構,同時融入了Spring Boot的特定約定。良好的項目結構不僅有助于代碼組織,還能提高開發(fā)效率和項目可維護性。了解Spring Boot的項目結構對于開發(fā)高質量的應用至關重要。
1. 基礎項目結構
1.1 標準目錄結構
基本的Spring Boot項目結構如下:
myproject/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ ├── resources/ │ │ └── webapp/ │ └── test/ ├── pom.xml └── README.md
1.2 Maven配置
標準的pom.xml配置:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
2. Java源碼結構
2.1 包結構組織
推薦的包結構組織方式:
com.example.project/ ├── config/ // 配置類 ├── controller/ // 控制器 ├── service/ // 服務層 │ ├── impl/ // 服務實現(xiàn) ├── repository/ // 數(shù)據(jù)訪問層 ├── model/ // 數(shù)據(jù)模型 │ ├── entity/ // 實體類 │ ├── dto/ // 數(shù)據(jù)傳輸對象 └── util/ // 工具類
2.2 啟動類配置
標準的啟動類結構:
package com.example.project;
@SpringBootApplication
public class Application {
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Application started!");
};
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3. 資源文件組織
3.1 配置文件結構
resources目錄下的配置文件組織:
resources/
├── application.yml
├── application-dev.yml
├── application-prod.yml
├── static/
│ ├── css/
│ ├── js/
│ └── images/
└── templates/
└── pages/
3.2 多環(huán)境配置
多環(huán)境配置示例:
# application.yml
spring:
profiles:
active: dev
---
# application-dev.yml
spring:
config:
activate:
on-profile: dev
datasource:
url: jdbc:h2:mem:testdb
---
# application-prod.yml
spring:
config:
activate:
on-profile: prod
datasource:
url: jdbc:mysql://production-server/db
4. 測試結構
4.1 單元測試組織
測試目錄結構:
src/test/java/com/example/project/
├── controller/
│ └── UserControllerTest.java
├── service/
│ └── UserServiceTest.java
└── repository/
└── UserRepositoryTest.java
測試類示例:
@SpringBootTest
class UserServiceTest {
@Autowired
private UserService userService;
@Test
void testFindById() {
User user = userService.findById(1L);
assertNotNull(user);
assertEquals("test", user.getName());
}
}
4.2 集成測試結構
集成測試示例:
@SpringBootTest
@AutoConfigureMockMvc
class UserControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@Test
void testGetUser() throws Exception {
mockMvc.perform(get("/api/users/1"))
.andExpect(status().isOk())
.andExpect(jsonPath("$.name").value("test"));
}
}
5. 項目構建和部署
5.1 構建配置
Maven構建插件配置:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
5.2 Docker支持
Dockerfile示例:
FROM openjdk:11-jdk-slim
VOLUME /tmp
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Docker Compose配置:
version: '3'
services:
app:
build: .
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
depends_on:
- db
db:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=testdb
通過以上內容,我們詳細介紹了Spring Boot項目的標準結構和最佳實踐。合理的項目結構不僅能夠提高代碼的可讀性和可維護性,還能夠幫助團隊成員更好地協(xié)作。特別是在大型項目中,良好的項目結構設計能夠有效降低代碼的耦合度,提高系統(tǒng)的可擴展性。此外,合適的測試結構和構建配置也是保證項目質量的重要因素。
到此這篇關于Spring Boot的項目結構的文章就介紹到這了,更多相關Spring Boot的項目結構內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Springboot整合JPA配置多數(shù)據(jù)源流程詳解
這篇文章主要介紹了Springboot整合JPA配置多數(shù)據(jù)源,JPA可以通過實體類生成數(shù)據(jù)庫的表,同時自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調用方法即可,很方便2022-11-11
Spring?cloud負載均衡@LoadBalanced?&?LoadBalancerClient
由于Spring?cloud2020之后移除了Ribbon,直接使用Spring?Cloud?LoadBalancer作為客戶端負載均衡組件,我們討論Spring負載均衡以Spring?Cloud2020之后版本為主,學習Spring?Cloud?LoadBalance2023-11-11
關于IDEA的junit單元測試Scanner輸入不可用的問題(多種原因分析)
IDEA在Junit測試中使用了Scanner,但是控制臺一直轉圈,無法輸入,eclipse默認可用,其實解決方法很多,今天小編給大家分享多種問題原因分析及解決方法,感興趣的朋友一起看看吧2021-06-06

