本文推荐一种 Spring Boot 工程结构,根据笔者日常工作积累。
src
| -- assembly
| -- main
| | -- bin
| | -- java
| | | -- com
| | | | -- organization
| | | | | -- project
| | | | | | -- module
| | | | | | | -- config
| | | | | | | -- controller
| | | | | | | -- constant
| | | | | | | -- dao
| | | | | | | | -- impl
| | | | | | | -- domain
| | | | | | | | -- bo
| | | | | | | | -- dto
| | | | | | | | -- po
| | | | | | | | -- vo
| | | | | | | -- exception
| | | | | | | -- manager
| | | | | | | | -- impl
| | | | | | | -- service
| | | | | | | | -- impl
| | | | | | | -- task
| | | | | | | -- util
| | | | | | | -- XXXApplication.java
| | -- lib
| | -- resources
| | | -- config
| -- test
LICENSE.txt
NOTICE.txt
README.txt
说明:
-
src
-
assembly
:存放 Maven Assembly 功能所需的文件。 -
main
-
bin
:存放启动应用脚本,Spring Boot 应用通常打包为jar
包,运行时使用java -jar
命令,如果需要通过启动命令配置一些参数,则直接使用java -jar
命令会不方便,通常会编写 SHELL 或 Python 脚本执行安装、启动、检查状态、停止、卸载等日常运维功能。 -
java
-
com/organization/project/module
:java
代码根路径,只存放应用主类XXXApplication.java
。-
config
:存放启动配置类,如自定义DataSource
配置。 -
controller
:开放 API 访问层,也可命名为handler
。 -
constant
:存放共享自定义常量类,注意每层使用的常量类放在各自包下,譬如controller
层使用的常量类且不共享给其它层使用,则在controller
下定义一个子包constant
存放。 -
dao
:存放数据访问类(Data Access Object)接口定义。-
impl
:存放数据访问类(Data Access Object)接口实现。
-
-
domain
:存放领域模型。-
bo
:Business Object:业务对象。 -
dto
:Data Transfering Object,业务系统间传输的对象。 -
po
:Persistent Object,即 Data Object,与数据表模型一一对应,不用do
定义包名是因为do
是关键字。 -
query
:Query Object,前端传来的封装查询参数的对象。 -
vo
:View Object,返回给前端的对象。
-
-
exception
:存放共享自定义异常类,注意每层使用的异常类放在各自包下,同constant
一致。 -
manager
:service
通用能力的下沉并封装调用外部接口逻辑,供service
层调用,存放接口定义。-
impl
:存放manager
接口实现。
-
-
service
:封装核心业务处理逻辑供controller
层调用,存放接口定义。-
impl
:存放service
接口实现。
-
-
task
:存放自定义任务,如定时任务等,也可命名为job
。 -
util
:存放工具类。
-
-
-
lib
:存放运行应用需要的第三方库文件,譬如指定运行的 JRE 版本,如应用需要使用 JRE 11 启动运行,但是部署服务器上JAVA_HOME
指向 JRE 8 安装路径,则可以将需要的 JRE 11 安装包存放在此目录下。 -
resources
:存放启动应用所需的资源文件。-
config
:存放启动应用所需的配置类资源文件。
-
-
-
LICENSE.txt
NOTICE.txt
README.txt