詳解SpringBoot目錄結(jié)構(gòu)劃分
前言
SpringBoot是整合Spring技術(shù)棧的一站式框架,是簡化Spring技術(shù)棧的快速開發(fā)腳手架,是一個(gè)能夠快速構(gòu)建生產(chǎn)級別的Spring應(yīng)用的工具。SpringBoot是目前流行的微服務(wù)框架,倡導(dǎo)“約定優(yōu)于配置”,簡化Spring項(xiàng)目搭建及開發(fā)過程。springboot提供了很多核心的功能,比如自動化配置、starter簡化maven配置、內(nèi)嵌servlet容器、應(yīng)用監(jiān)控等功能。本文就來講解SpringBoot項(xiàng)目的目錄結(jié)構(gòu)。
先看第一層目錄
/.mvn (這是 Maven Wrapper 的存放位置。Maven Wrapper 是一個(gè)包裝器工具,用于在沒有預(yù)先安裝 Maven 的系統(tǒng)上運(yùn)行 Maven 項(xiàng)目。它包含一個(gè)用于下載和安裝特定 Maven 版本的腳本。如果刪除這個(gè)文件夾會導(dǎo)致無法使用 Maven Wrapper 來自動下載和管理特定版本的 Maven。開發(fā)人員必須手動安裝并配置全局的 Maven,或者使用其他構(gòu)建工具來代替 Maven。)
/src (項(xiàng)目的源碼層,日常開發(fā)都在此目錄下的進(jìn)行)
/target (放置編譯后的.class文件、配置文件等、 target文件夾是用來存放項(xiàng)目構(gòu)建后的文件和目錄、jar包、war包、編譯的class文件,都是maven構(gòu)建時(shí)生成的。)
/.gitignore ( Git 是一個(gè)版本控制系統(tǒng),用于跟蹤項(xiàng)目中的代碼更改。.gitignore 文件用于指定應(yīng)該被 Git 忽略的文件和目錄,以防止它們被添加到版本控制中。這個(gè)文件通常包含一些自動生成的文件、編譯輸出、臨時(shí)文件等。刪除 .gitignore 文件可能會導(dǎo)致一些不應(yīng)被版本控制的文件和目錄被納入版本控制中,例如編譯輸出、臨時(shí)文件等。這會增加代碼庫的體積,使版本控制變得混亂。)
/HELP.md (一個(gè)Markdown格式的文件,通常包含項(xiàng)目的幫助信息、說明和指南。這是一個(gè)包含項(xiàng)目幫助信息的 Markdown 文件。通常,這個(gè)文件會提供項(xiàng)目的概述、配置說明、運(yùn)行指南等信息,方便其他開發(fā)人員了解和使用項(xiàng)目。刪除 HELP.md 文件會使其他開發(fā)人員難以獲取項(xiàng)目的相關(guān)信息,降低項(xiàng)目的可維護(hù)性和可理解性。項(xiàng)目的說明、配置指南等重要信息將不再可用。)
/mvnw ( mvnw 是 Maven Wrapper 的可執(zhí)行腳本文件。它是 Spring Boot 項(xiàng)目中常見的一個(gè)文件,用于簡化構(gòu)建和管理項(xiàng)目依賴的過程。Maven 是一個(gè)用于構(gòu)建和管理 Java 項(xiàng)目的強(qiáng)大工具,它使用項(xiàng)目配置文件(pom.xml)來定義項(xiàng)目的結(jié)構(gòu)、依賴和構(gòu)建過程。然而,使用傳統(tǒng)的 Maven 構(gòu)建項(xiàng)目需要在本地環(huán)境中安裝和配置 Maven 工具。
為了簡化項(xiàng)目的構(gòu)建和管理過程,并確保項(xiàng)目在不同環(huán)境中的一致性,Spring Boot 引入了 Maven Wrapper。Maven Wrapper 是一個(gè)用于包裝 Maven 的腳本和庫文件的工具,可以將 Maven 包裝在項(xiàng)目內(nèi)部,不依賴于本地環(huán)境中是否已安裝 Maven。
在 Spring Boot 項(xiàng)目中,mvnw 文件是 Maven Wrapper 的可執(zhí)行腳本文件,它會根據(jù)項(xiàng)目中的配置自動下載和使用特定版本的 Maven。當(dāng)你在項(xiàng)目目錄下執(zhí)行 mvnw 命令時(shí),它會檢查項(xiàng)目中是否已經(jīng)存在所需的 Maven 版本,如果不存在,會自動下載并使用指定的 Maven 版本進(jìn)行構(gòu)建。
使用 Maven Wrapper 可以確保項(xiàng)目的構(gòu)建過程獨(dú)立于本地環(huán)境,并提供了更好的可移植性和項(xiàng)目的一致性。你只需要使用項(xiàng)目中提供的 mvnw 文件,無需手動安裝和配置 Maven,就可以在任何環(huán)境中構(gòu)建和管理項(xiàng)目。
這是 Maven Wrapper 的可執(zhí)行腳本(Unix/Linux 系統(tǒng))。它允許在沒有全局 Maven 安裝的情況下運(yùn)行 Maven 項(xiàng)目。運(yùn)行 mvnw 腳本會自動下載并使用指定版本的 Maven 來執(zhí)行項(xiàng)目構(gòu)建、測試等操作。
/mvnw.cmd (這是 Maven Wrapper 的可執(zhí)行腳本(Windows 系統(tǒng))。與上面的 mvnw 腳本類似,它也允許在沒有全局 Maven 安裝的情況下運(yùn)行 Maven 項(xiàng)目,但是用于 Windows 系統(tǒng)的命令行環(huán)境。刪除這兩個(gè)文件會導(dǎo)致無法使用 Maven Wrapper 運(yùn)行 Maven 命令。開發(fā)人員將無法使用提供的腳本快速執(zhí)行構(gòu)建、測試和其他 Maven 相關(guān)操作。)
/pom.xml (pom.xml是Maven項(xiàng)目的核心配置文件,用于管理項(xiàng)目的依賴、插件、構(gòu)建配置等。在Spring Boot項(xiàng)目中,pom.xml文件也扮演著重要的角色。在pom.xml文件中,可以配置項(xiàng)目的資源文件。 在Spring Boot的pom.xml文件中,通常會有一個(gè)<resources>標(biāo)簽文件,用于指定資源文件的路徑和名稱 。)
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.7.17-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> <optional>true</optional> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter-test</artifactId> <version>2.3.1</version> <scope>test</scope> </dependency> <!-- Swagger--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <!-- Swagger-UI --> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency> </dependencies> <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> <repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <releases> <enabled>false</enabled> </releases> </pluginRepository> </pluginRepositories> </project>
重點(diǎn)是src目錄
|---/src/main
|---|---/src/main/java:目錄下放置所有的java文件(源代碼)
|---|---|---/src/main/java/com/example/demo :核心源碼存放文件
|---|---|---/src/main/java/com/example/demo/controller :控制層
|---|---|---/src/main/java/com/example/demo/service:業(yè)務(wù)代碼層
|---|---|---/src/main/java/com/example/demo/mapper:持久層
|---|---|---/src/main/java/com/example/demo/vo :通常用于與前端交互,封裝前端調(diào)用某個(gè)接口之后所需的所有數(shù)據(jù)。在前后端分離的時(shí)代,VO主要應(yīng)用于表示視圖層的類。
|---|---|---/src/main/java/com/example/demo/dto :則主要應(yīng)用于數(shù)據(jù)傳輸層,特別是在Controller層和Service層。在Controller層,DTO用于接收參數(shù),無論是單個(gè)參數(shù)還是多個(gè)參數(shù),都可以通過創(chuàng)建一個(gè)DTO對象來進(jìn)行接收。使用DTO傳參相比使用注解(@RequestParam等)具有更高的可讀性和維護(hù)性。在Service層,處理復(fù)雜的邏輯后,將處理好的DTO進(jìn)行copyBean即可無傷轉(zhuǎn)換為持久化對象(Bo)??偟膩碚f,VO和DTO都是為了實(shí)現(xiàn)程序中的數(shù)據(jù)傳輸和交互,但它們的使用場景不同。前端與后端交互時(shí),使用VO;而在服務(wù)層之間傳輸數(shù)據(jù)時(shí),使用DTO。
|---|---|---/src/main/java/com/example/demo/entity:存放實(shí)體類,與數(shù)據(jù)庫表名和字段名對應(yīng)
|---|---|---/src/main/java/com/example/demo/config:一些配置類,例如redis、swagger等配置信息
|---|---|---/src/main/java/com/example/demo/utils:一些工具類,例如時(shí)間格式化工具、加密工具、返回結(jié)果封裝工具、文件上傳工具等
|---|---/src/main/resource: 存放資源文件、如靜態(tài)資源文件、配置文件、頁面文件等
|---|---|---/src/main/resource/mapper:存放MyBatis操作數(shù)據(jù)庫的xml文件
|---|---|---/src/main/resource/static:存放靜態(tài)資源例如css樣式、圖片等
|---|---|---/src/main/resources/templates:存放模板文件如thymeleaf模板文件
|---|---|---/src/mian/resource/application.properties:: SpringBoot項(xiàng)目的配置文件,SpringBoot支持.properties和.yml文件
application.properties文件內(nèi)容
#端口號配置 server.port=9099 #數(shù)據(jù)源相關(guān)配置 spring.datasource.url=jdbc:mysql://localhost:3306/finshing?serverTimezone=UTC&&characterEncoding=UTF-8&allowMultiQueries=true spring.datasource.password=123456 spring.datasource.username=root #mybatis映射對應(yīng)的實(shí)體類位置 mybatis.type-aliases-package=com.example.demo.entity #mybatis的映射xml文件路徑位置 mybatis.mapper-locations=classpath:/mapper/*Mapper.xml #開啟數(shù)據(jù)庫下劃線映射Java駝峰 mybatis.configuration.map-underscore-to-camel-case: true spring.mvc.view.prefix=/pages/ spring.mvc.view.suffix=.html spring.mvc.pathmatch.matching-strategy = ant_path_matcher # 配置上傳文件大小限制 # 單個(gè)文件大小配置 spring.servlet.multipart.maxFileSize=30MB # 請求總大小配置 spring.http.multipart.maxRequestSize = 30MB
|---/src/test 單元測試類java文件
到此這篇關(guān)于詳解SpringBoot目錄結(jié)構(gòu)劃分的文章就介紹到這了,更多相關(guān)SpringBoot目錄結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Hibernate懶加載之<class>標(biāo)簽上的lazy
這篇文章主要介紹了Hibernate懶加載之<class>標(biāo)簽上的lazy,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Java實(shí)現(xiàn)定時(shí)任務(wù)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)定時(shí)任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09Springboot+Shiro+Jwt實(shí)現(xiàn)權(quán)限控制的項(xiàng)目實(shí)踐
如今的互聯(lián)網(wǎng)已經(jīng)成為前后端分離的時(shí)代,所以本文在使用SpringBoot整合Shiro框架的時(shí)候會聯(lián)合JWT一起搭配使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-09-09獲取系統(tǒng)參數(shù)System.getProperties()與配置文件參數(shù)@Value(“${key}“)
這篇文章主要介紹了獲取系統(tǒng)參數(shù)System.getProperties()與配置文件參數(shù)@Value("${key}"),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05idea新建mapper.xml文件詳細(xì)步驟如:mybatis-config
這篇文章主要介紹了idea新建xml模板設(shè)置,例如:mybatis-config,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07