SpringBoot中項目結(jié)構(gòu)的項目實踐
技術(shù)背景
Spring Boot項目結(jié)構(gòu)遵循Maven或Gradle的標(biāo)準(zhǔn)目錄結(jié)構(gòu),同時融入了Spring Boot的特定約定。良好的項目結(jié)構(gòu)不僅有助于代碼組織,還能提高開發(fā)效率和項目可維護性。了解Spring Boot的項目結(jié)構(gòu)對于開發(fā)高質(zhì)量的應(yīng)用至關(guān)重要。
1. 基礎(chǔ)項目結(jié)構(gòu)
1.1 標(biāo)準(zhǔn)目錄結(jié)構(gòu)
基本的Spring Boot項目結(jié)構(gòu)如下:
myproject/ ├── src/ │ ├── main/ │ │ ├── java/ │ │ ├── resources/ │ │ └── webapp/ │ └── test/ ├── pom.xml └── README.md
1.2 Maven配置
標(biāo)準(zhǔn)的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源碼結(jié)構(gòu)
2.1 包結(jié)構(gòu)組織
推薦的包結(jié)構(gòu)組織方式:
com.example.project/ ├── config/ // 配置類 ├── controller/ // 控制器 ├── service/ // 服務(wù)層 │ ├── impl/ // 服務(wù)實現(xiàn) ├── repository/ // 數(shù)據(jù)訪問層 ├── model/ // 數(shù)據(jù)模型 │ ├── entity/ // 實體類 │ ├── dto/ // 數(shù)據(jù)傳輸對象 └── util/ // 工具類
2.2 啟動類配置
標(biāo)準(zhǔn)的啟動類結(jié)構(gòu):
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 配置文件結(jié)構(gòu)
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. 測試結(jié)構(gòu)
4.1 單元測試組織
測試目錄結(jié)構(gòu):
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 集成測試結(jié)構(gòu)
集成測試示例:
@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. 項目構(gòu)建和部署
5.1 構(gòu)建配置
Maven構(gòu)建插件配置:
<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
通過以上內(nèi)容,我們詳細(xì)介紹了Spring Boot項目的標(biāo)準(zhǔn)結(jié)構(gòu)和最佳實踐。合理的項目結(jié)構(gòu)不僅能夠提高代碼的可讀性和可維護性,還能夠幫助團隊成員更好地協(xié)作。特別是在大型項目中,良好的項目結(jié)構(gòu)設(shè)計能夠有效降低代碼的耦合度,提高系統(tǒng)的可擴展性。此外,合適的測試結(jié)構(gòu)和構(gòu)建配置也是保證項目質(zhì)量的重要因素。
到此這篇關(guān)于Spring Boot的項目結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Spring Boot的項目結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
將本地SpringBoot項目發(fā)布到云服務(wù)器的方法
這篇文章主要介紹了如何將本地SpringBoot項目發(fā)布到云服務(wù)器,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12Springboot整合JPA配置多數(shù)據(jù)源流程詳解
這篇文章主要介紹了Springboot整合JPA配置多數(shù)據(jù)源,JPA可以通過實體類生成數(shù)據(jù)庫的表,同時自帶很多增刪改查方法,大部分sql語句不需要我們自己寫,配置完成后直接調(diào)用方法即可,很方便2022-11-11Spring?cloud負(fù)載均衡@LoadBalanced?&?LoadBalancerClient
由于Spring?cloud2020之后移除了Ribbon,直接使用Spring?Cloud?LoadBalancer作為客戶端負(fù)載均衡組件,我們討論Spring負(fù)載均衡以Spring?Cloud2020之后版本為主,學(xué)習(xí)Spring?Cloud?LoadBalance2023-11-11關(guān)于IDEA的junit單元測試Scanner輸入不可用的問題(多種原因分析)
IDEA在Junit測試中使用了Scanner,但是控制臺一直轉(zhuǎn)圈,無法輸入,eclipse默認(rèn)可用,其實解決方法很多,今天小編給大家分享多種問題原因分析及解決方法,感興趣的朋友一起看看吧2021-06-06