当前位置: 首页 > article >正文

Java Spring Boot项目目录规范示例

以下是一个典型的 Java Spring Boot 项目目录结构规范示例,结合了分层架构和模块化设计的最佳实践:

text

复制

下载

src/
├── main/
│   ├── java/
│   │   └── com/
│   │       └── example/
│   │           └── myapp/
│   │               ├── MyAppApplication.java          # 主启动类
│   │               │
│   │               ├── config/                        # 配置类
│   │               │   ├── SwaggerConfig.java         # Swagger 配置
│   │               │   ├── SecurityConfig.java        # 安全配置
│   │               │   └── WebMvcConfig.java          # MVC 配置
│   │               │
│   │               ├── controller/                   # 控制器层
│   │               │   ├── UserController.java
│   │               │   └── ProductController.java
│   │               │
│   │               ├── service/                      # 服务层
│   │               │   ├── UserService.java
│   │               │   ├── impl/                     # 服务实现
│   │               │   │   ├── UserServiceImpl.java
│   │               │   │   └── ProductServiceImpl.java
│   │               │
│   │               ├── repository/                   # 数据访问层
│   │               │   ├── UserRepository.java       # JPA 接口
│   │               │   └── ProductRepository.java
│   │               │
│   │               ├── model/                        # 数据模型
│   │               │   ├── entity/                   # 数据库实体
│   │               │   │   ├── User.java
│   │               │   │   └── Product.java
│   │               │   │
│   │               │   ├── dto/                      # DTO 对象
│   │               │   │   ├── request/              # 请求对象
│   │               │   │   │   ├── CreateUserRequest.java
│   │               │   │   │   └── UpdateProductRequest.java
│   │               │   │   └── response/            # 响应对象
│   │               │   │
│   │               │   └── enums/                   # 枚举类
│   │               │
│   │               ├── exception/                    # 异常处理
│   │               │   ├── GlobalExceptionHandler.java
│   │               │   └── CustomException.java
│   │               │
│   │               ├── util/                         # 工具类
│   │               │   ├── DateUtils.java
│   │               │   └── StringUtils.java
│   │               │
│   │               ├── security/                     # 安全模块
│   │               │   ├── JwtUtils.java
│   │               │   └── UserDetailsServiceImpl.java
│   │               │
│   │               └── scheduler/                    # 定时任务
│   │                   └── ReportGenerationScheduler.java
│   │
│   └── resources/
│       ├── static/                                   # 静态资源
│       ├── templates/                               # 模板文件
│       ├── application.yml                          # 主配置文件
│       ├── application-dev.yml                      # 开发环境配置
│       ├── application-prod.yml                     # 生产环境配置
│       └── db/
│           ├── migration/                           # 数据库迁移脚本(Flyway/Liquibase)
│           │   └── V1__init_schema.sql
│           └── data.sql                             # 初始数据
│
└── test/                                            # 测试代码└── java/└── com/└── example/└── myapp/├── controller/│   └── UserControllerTest.java├── service/│   └── UserServiceTest.java└── integration/                # 集成测试└── UserIntegrationTest.java

核心目录说明:

  1. 主启动类

    • 位于根包下,用于启动 Spring Boot 应用

  2. 分层结构

    • controller: 处理 HTTP 请求,调用 Service 层

    • service: 业务逻辑层,接口与实现分离

    • repository: 数据访问层(JPA/Hibernate)

    • model: 数据模型定义(DTO/Entity)

  3. 配置类

    • 集中管理 Spring 配置(安全、Swagger、数据库等)

  4. 异常处理

    • 统一异常处理和自定义异常定义

  5. 资源文件

    • application-*.yml: 多环境配置文件

    • db/migration/: 数据库迁移脚本(推荐使用 Flyway)

  6. 测试目录

    • 分层测试结构(单元测试/集成测试)

最佳实践建议:

  1. 包命名规范

    • 使用全小写字母,避免使用下划线

    • 按功能模块分包(如:com.example.myapp.order

  2. 代码分离原则

    • Controller 保持简洁(仅处理参数校验和响应封装)

    • 业务逻辑集中在 Service 层

    • 数据访问逻辑在 Repository 层

  3. DTO 使用规范

    • 使用单独的 DTO 进行接口数据传输

    • 避免直接暴露 Entity 对象给前端

  4. 版本控制

    • 数据库迁移脚本使用版本号管理

    • API 版本控制(如:/api/v1/users

  5. 测试规范

    • 测试类命名:被测试类名 + Test 后缀

    • 使用 @SpringBootTest 进行集成测试

    • 使用 @Mock 和 @InjectMocks 进行单元测试

根据项目复杂度可适当调整结构,例如增加以下目录:

  • aspects/: AOP 切面

  • client/: 外部服务调用客户端

  • messaging/: 消息处理(Kafka/RabbitMQ)

  • validation/: 自定义校验逻辑

相关文章:

Java Spring Boot项目目录规范示例

以下是一个典型的 Java Spring Boot 项目目录结构规范示例,结合了分层架构和模块化设计的最佳实践: text 复制 下载 src/ ├── main/ │ ├── java/ │ │ └── com/ │ │ └── example/ │ │ └── myapp/ │…...

针对共享内存和上述windows消息机制 在C++ 和qt之间的案例 进行详细举例说明

针对共享内存和上述windows消息机制 在C++ 和qt之间的案例 进行详细举例说明 以下是关于在 C++ 和 Qt 中使用共享内存(QSharedMemory)和 Windows 消息机制(SendMessage / PostMessage)进行跨线程或跨进程通信的详细示例。 🧩 使用 QSharedMemory 进行进程间通信(Qt 示例…...

vue H5解决安卓手机软键盘弹出,页面高度被顶起

开发中安卓机上遇到的软键盘弹出导致布局问题 直接上代码_ 在这里插入代码片 <div class"container"><div class"appContainer" :style"{height:isKeyboardOpen? Heights :inherit}"><p class"name"><!-- 绑定…...

CSS专题之自定义属性

前言 石匠敲击石头的第 12 次 CSS 自定义属性是现代 CSS 的一个强大特性&#xff0c;可以说是前端开发需知、必会的知识点&#xff0c;本篇文章就来好好梳理一下&#xff0c;如果哪里写的有问题欢迎指出。 什么是 CSS 自定义属性 CSS 自定义属性英文全称是 CSS Custom Proper…...

问题 | 当前计算机视觉迫切解决的问题

当前计算机视觉领域虽然在技术上取得了显著进展&#xff0c;但仍面临一系列关键挑战。结合最新研究与应用现状&#xff0c;以下是最迫切需要解决的几大问题&#xff1a; 1. 数据质量与多样性不足 高质量标注数据的获取&#xff1a;训练高效模型依赖大量精准标注的数据&#x…...

七、深入 Hive DDL:管理表、分区与洞察元数据

作者&#xff1a;IvanCodes 日期&#xff1a;2025年5月13日 专栏&#xff1a;Hive教程 内容导航 一、表的 DDL 操作 (非创建)二、分区的 DDL 操作三、洞察元数据&#xff1a;SHOW 命令的威力结语&#xff1a;DDL 与 SHOW&#xff0c;Hive 管理的双翼练习题一、选择题二、代码题…...

Qt6.x检查网络是否在线(与Qt 5.x不同)

Qt 5.x.x 要判断客户端网络是否联通&#xff0c;一般用如下方法&#xff1a; #include <QNetworkConfigurationManager>auto netWorkCheck new QNetworkConfigurationManager(); auto flag netWorkCheck->isOnline(); Qt 6.x.x 废弃了 QNetworkConfigurationManag…...

直接在Excel中用Python Matplotlib/Seaborn/Plotly......

本次分享如何利用pyxll包&#xff0c;实现直接在Excel中使用Python Matplotlib/Seaborn/Plotly等强大可视化工具。 pyxll配置 pyxll安装 pip install pyxll pyxll install pyxll自定义方法 例如&#xff0c;自定义一个计算斐波那契数的方法fib&#xff0c;并使用pyxll装饰器…...

React面试常问问题详解

以下是30个React面试中常见的问题及简要解析&#xff0c;涵盖基础概念、核心原理、性能优化、Hooks、状态管理等方面&#xff0c;适用于初中高级开发者准备面试时参考&#xff1a; 一、React 基础与核心概念 React 是什么&#xff1f; React 是由 Facebook 开发的用于构建用户界…...

【Java】网络编程(Socket)

网络编程 Socket 我们开发的网络应用程序位于应用层&#xff0c;TCP和UDP属于传输层协议&#xff0c;在应用层如何使用传输层的服务呢&#xff1f;在应用层和传输层之间&#xff0c;则使用套接字Socket来进行分离 套接字就像是传输层为应用层开的一个小口&#xff0c;应用程…...

思科(Cisco ASA/Firepower)、华三(H3C)、华为(Huawei USG)防火墙 的基础配置

以下是针对 思科&#xff08;Cisco ASA/Firepower&#xff09;、华三&#xff08;H3C&#xff09;、华为&#xff08;Huawei USG&#xff09;防火墙 的基础配置指南&#xff0c;涵盖 区域划分、安全策略、NAT、路由 等核心功能。配置示例基于通用场景&#xff0c;实际部署时需根…...

华为海思系列----昇腾张量编译器(ATC)模型转换工具----入门级使用指南(LINUX版)

由于官方SDK比较冗余且经常跨文档讲解且SDK整理的乱七八糟,对于新手来说全部看完上手成本较高,本文旨在以简短的方式介绍 CAFFE / ONNX 模型转 om 模型,并进行推理的全流程。希望能够帮助到第一次接触华为海思框架的道友们。大佬们就没必要看这种基础文章啦! 注:本…...

supabase 怎么新建项目?

在 Supabase 中新建项目主要通过官方网站的仪表盘 (Dashboard) 来完成。以下是详细步骤&#xff1a; 通过 Supabase 仪表盘新建项目&#xff1a; 注册/登录 Supabase 账户&#xff1a; 访问 Supabase 官网&#xff1a;https://supabase.com/如果你还没有账户&#xff0c;点击 …...

Windows环境下maven的安装与配置

1.检查JAVA_HOME环境变量 Maven是使用java开发的&#xff0c;所以必须知道当前系统环境中的JDK的安装目录。 搜索栏直接输入“cmd” 或者 WinR 输入cmd 在打开的终端窗口输入“echo %JAVA_HOME”&#xff0c;就可以看到jdk的位置了。 如果没有的话&#xff0c;请参考我的文章&a…...

LeetCode:513、找树左下角的值

//递归法 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* t…...

Vxe UI vue vxe-table 实现表格数据分组功能,不是使用树结构,直接数据分组

Vxe UI vue vxe-table 实现表格数据分组功能&#xff0c;不是使用树结构&#xff0c;直接数据分组 查看官网&#xff1a;https://vxetable.cn gitbub&#xff1a;https://github.com/x-extends/vxe-table gitee&#xff1a;https://gitee.com/x-extends/vxe-table 代码 通过…...

如何禁止chrome自动更新

百度了一下 下面这个方法实测有效 目录 1、WINR 输入 services.msc 2、在Services弹窗中找到下面两个service并disable 3、验证是否禁止更新成功&#xff1a; 1、WINR 输入 services.msc 2、在Services弹窗中找到下面两个service并disable GoogleUpdater InternalService…...

阳光学院【2020下】计算机网络原理-A卷-试卷-期末考试试卷

一、单选题&#xff08;共25分&#xff0c;每空1分&#xff09; 1.ICMP协议工作在TCP/IP参考模型的 ( ) A.主机-网络 B.网络互联层 C.传输层 D.应用层 2.下列关于交换技术的说法中&#xff0c;错误的是 ( ) A.电路交换适用于突发式通信 B.报文交换不能满足实时通信 C.报文…...

Spring Boot 使用 OSHI 实现系统运行状态监控接口

在实际开发中&#xff0c;我们经常需要获取服务器的运行状态&#xff0c;例如&#xff1a;CPU 使用率、内存使用情况、磁盘状态、JVM 运行信息等&#xff0c;以便于运维监控和性能分析。本文将基于 Spring Boot OSHI 实现一个系统信息接口&#xff0c;可返回当前服务运行的详细…...

FastAPI+MongoDB+React实现查询博客详情功能

第一部分:FastAPI 和 MongoDB 后端 确保你的 FastAPI 应用已经配置好,并且 MongoDB 数据库已经运行。以下是完整的后端代码: # main.py from fastapi import FastAPI, HTTPException, Depends from motor.motor_asyncio import AsyncIOMotorClient from pydantic import B…...

kotlin-协程(什么是一个协程)

1.什么指一个协程对于线程来说一个thread就是就是指一个线程&#xff0c;thread为什么成为线程呢&#xff1f;因为他实现了对线程的一个抽象管理&#xff0c;可以管理这个线程&#xff0c;启动&#xff0c;可以查看各种信息 那么协程呢&#xff1f; public fun CoroutineScop…...

数组和切片的区别

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…...

WPF内嵌其他进程的窗口

WPF内嵌其他进程窗口的常见方法有 HwndHost SetParent 和 WindowsFormsHost WinForms Panel SetParent 推荐使用自定义HwndHost 两者的对比区别 示例代码 public class MyWndHost : HwndHost {const int WS_CHILD 0x40000000;const int WS_VISIBLE 0x10000000;const i…...

阿里云购买ECS 安装redis mysql nginx jdk 部署jar 部署web

服务&#xff1a;ECS防火墙要开启、阿里云控制平台&#xff1a;网路端口安全策略要设置 阿里云服务维护 1.安装JDK 查询要安装jdk的版本,命令&#xff1a;yum -y list java* 命令&#xff1a;yum install -y java-1.8.0-openjdk.x86_64 yum install -y java-17-openjdk.x8…...

CVPR2025 | Prompt-CAM: 让视觉 Transformer 可解释以进行细粒度分析

Prompt-CAM: Making Vision Transformers Interpretable for Fine-Grained Analysis 摘要-Abstract引言-Introduction方法-Approach预备知识-PreliminariesPrompt-CAM: Prompt Class Attention Map特征识别与定位-Trait Identification and Localization变体与扩展-Variants an…...

Fabric系列 - SoftHSM 软件模拟HSM

在 fabric-ca-server 上使用软件模拟的 HSM(密码卡) 功能 安装 SoftHSMv2 教程 SoftHSMv2 默认的配置文件 /etc/softhsm2.conf默认的token目录 /var/lib/softhsm/tokens/ 初始化和启动fabric-ca-server&#xff0c;需要设置一个管理员用户的名称和密码 初始化令牌 # 初始…...

解锁 DevOps 新境界 :使用 Flux 进行 GitOps 现场演示 – 自动化您的 Kubernetes 部署

前言 GitOps 是实现持续部署的云原生方式。它的名字来源于标准且占主导地位的版本控制系统 Git。GitOps 的 Git 在某种程度上类似于 Kubernetes 的 etcd&#xff0c;但更进一步&#xff0c;因为 etcd 本身不保存版本历史记录。毋庸置疑&#xff0c;任何源代码管理服务&#xf…...

LLM大模型中的基础数学工具—— 信号处理与傅里叶分析

Q51: 推导傅里叶变换 的 Parseval 定理 傅里叶变换的 Parseval 定理揭示了啥关系&#xff1f; Parseval 定理揭示了傅里叶变换中时域与频域的能量守恒关系&#xff0c;即信号在时域的总能量等于其在频域的总能量。这就好比一个物体无论从哪个角度称重&#xff0c;重量始终不…...

calico.yaml+国内源

pod网段为&#xff1a;10.244.0.0/16 #kubeadm init 时设置的pod网段&#xff0c;每个环境不同&#xff0c;参考自身环境。 calico.yaml文件里的镜像均为&#xff1a; swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/calico/cni:v3.26.1 swr.cn-north-4.myhuaweiclou…...

橡胶制品行业质检管理的痛点 质检LIMS如何重构橡胶制品质检价值链

橡胶制品广泛应用于汽车、医疗、航空等领域&#xff0c;其性能稳定性直接关联终端产品的安全性。从轮胎耐磨性测试到密封件耐腐蚀性验证&#xff0c;每一项检测数据都是企业参与市场竞争的核心筹码。然而&#xff0c;传统实验室管理模式普遍面临设备调度混乱、检测流程追溯断层…...