1. 前言
目前 Spring Boot 已经成为主流的 Java Web 开发框架,熟练掌握 Spring Boot 并能够根据业务来定制 Spring Boot 成为一个 Java 开发者的必备技巧,但是总是零零碎碎不够系统,所以萌生了从零搭建一个后端脚手架的想法。并把这个过程中的细节思路和之前的一些文章结合起来展现给大家,希望能够实实在在帮助学习 Spring Boot 的同学,当然能力有限如果有不足之处还请多多指教。
2. 面向的群体
首先,这个定位不是完全没有接触过 Spring Boot 的初学者,因为 Spring Boot 的简单入门并不是特别难,找一些其他大佬的入门教程学习一阵就可以很快的入门;而是面向具有 Spring Boot 的学习经验和不够熟练的同学们,同时提供一些可以开箱即用的解决方案到实际开发中。
3. 项目结构介绍
其实我不太喜欢那种相互依赖整了好几个模块, DAO 、 Service 、 Controller 各搞一个层,然后层层依赖。对于单体项目来说这种结构把简单的事情复杂化了,容易导致依赖管理混乱。所以一般的简单项目我都建议采用下面的结构:
### 从零搭建Spring Boot脚手架:开篇与技术选型
#### 一、引言
当前,Spring Boot已成为主流的Java Web开发框架之一,它简化了开发流程,提升了开发效率,尤其受到广大Java开发者的青睐。对于已经具备一定Spring Boot使用经验但希望进一步深入学习、熟练掌握该框架特性的开发者而言,从零开始搭建一个完整的后端脚手架不仅有助于加深对Spring Boot的理解,还能提供一系列实用的解决方案。本文旨在通过详细介绍这一过程的关键步骤和技术选型,为读者提供一份详实的指南。
#### 二、面向群体
本文的目标读者是有一定Spring Boot基础但还不算精通的开发者。如果你从未接触过Spring Boot,市面上有很多入门级教程可以帮助你快速上手。而本文更适合那些已经入门并希望通过实践项目进一步提高自己技能的开发者们。我们将重点探讨如何构建一个结构合理、易于扩展且高效的后端脚手架,并分享一些最佳实践。
#### 三、项目结构设计
在项目结构设计方面,传统的多层架构(如DAO、Service、Controller等)虽然有利于模块化开发,但在小型或中型项目中可能会引入不必要的复杂性。因此,推荐采用更加简洁明了的项目结构。下面是一种推荐的结构示例:
- **kono-dependencies**:这是一个专门用于管理依赖版本的模块,确保所有依赖版本的一致性和兼容性。通过这种方式,可以有效地避免版本冲突等问题。
- 使用Maven作为构建工具时,可以在`kono-dependencies`模块中设置所有依赖的版本,通过`dependencyManagement`标签进行管理。
- 示例配置如下:
```xml
<groupId>cn.felord</groupId>
<artifactId>kono-dependencies</artifactId>
<version>1.0.0.RELEASE</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 其他依赖 -->
</dependencies>
</dependencyManagement>
```
- **版本号管理**:采用类似Spring Boot的版本号规则,即MAJOR.MINOR.PATCH.LABEL格式。其中:
- MAJOR(主版本号):当做出不兼容API更改时增加。
- MINOR(次版本号):当添加新功能时增加。
- PATCH(修订版本号):当进行向后兼容的bug修复时增加。
- LABEL(标记):用于标识开发版、快照版、里程碑版或正式版等不同发布阶段。
#### 四、技术选型
针对本项目,以下是一些关键的技术选型:
- **Spring Boot**:作为核心整合框架,提供了快速应用开发的支持。
- **Servlet 4**:作为Web标准,确保应用的标准化和可移植性。
- **Undertow/Tomcat**:作为Web容器,选择其中之一来部署应用。
- **Spring Cache**:用于实现缓存抽象层,提高应用性能。
- **Spring Security** / **JSON Web Token (JWT)**:提供安全框架支持,包括认证和授权等功能。
- **MyBatis Plus 3** / **Spring Data JPA**:选择其中一个作为ORM框架,用于数据访问层的开发。
- **Redis**:作为缓存中间件,提高应用响应速度。
- **MySQL**:作为关系型数据库管理系统。
- **MapStruct**:用于bean转换,提高代码编写效率。
- **Lombok**:简化bean类的编写,减少样板代码。
- **Swagger 2**:生成API文档,方便前后端协同开发。
- **Docker**:容器化技术,便于部署和管理应用。
需要注意的是,并非所有技术都会在项目初始阶段集成进来,随着项目的推进,可以根据具体需求逐步引入合适的技术栈。此外,也可以根据项目的实际情况,考虑引入更多前沿的技术。
通过从零开始构建Spring Boot脚手架的过程,不仅可以帮助开发者更好地理解Spring Boot的核心概念和技术栈的选择,还能通过实际操作提升自己的开发技能,为后续的实际项目打下坚实的基础。