阅读量:0
为什么会有这个系列文章
- 在项目开发中,大多项目依旧沿用的是 JDK 8 + Spring Boot 2.x 系列的技术栈,没有Spring Boot 3.x 的上手实践机会。
- 在个人学习探索 Spring Boot 3.x 的过程中,遇到多数第三方框架集成和问题排查的技术问题,搜索到都是零碎的、没有直接结果的回答,所以以此系列记录在 Spring Boot 3.x项目探索过程,搭建一个 web 项目的基础脚手架,供其他用到类似技术的同学参考。
技术选型
因为项目目前定义为单体且以简单易上手为主,所以采用的技术栈相对通用、易用,有其他需求的同学可留言,在有能力的情况下会进行集成 Demo.
技术栈 | 版本 |
---|---|
JDK | 21 |
Spring Boot | 3.2.5 |
PostgreSQL | 16 |
MyBatis Plus(ORM 框架) | 3.5.7 |
Redis(外置缓存) | 7 |
Redisson (Redis 高级客户端) | 3.25.0 |
SaToken(轻量鉴权框架) | 1.38.0 |
MapStruct(实体映射工具,非必需) | 1.5.5.Final |
项目初始化
根据个人习惯,用生成器或 IDE 工具初始化项目,或创建 Maven 工程后手动添加依赖。
Spring 官方项目初始化工具 start.spring.io ,阿里云初始化工具 start.aliyun.com,网络环境不佳的同学可选择阿里云工具创建。
Spring 官方初始化工具示例
阿里云初始化工具示例
阿里云应用脚手架对每一项描述较为清晰,不多复述
IDE 工具示例(以 IDEA 为例)
项目结构
不同工具初始化目录结构可能略有差异
├─src │├─main │ ├─java │ │ └─com │ │ └─bootemp │ │ └─boot3 │ │ └─Boot3Application.java---- // 项目启动类 │ └─resources │ └─application.properties--------- // 项目默认配置文件 └─test------------------------------- // 单元测试 └─pom.xml------------------------------ // Maven 工程文件
项目配置
项目结构规划
合适的项目结构有利于项目后期的维护,不同的项目结构适合不同的开发团队和开发习惯,仅个人习惯。
├─.gitignore ├─docs------------------------------ // 项目文档,如SQL、项目部署文档,UML等 ├─pom.xml └─src └─main └─java └─cn └─yiyanc ├─common------------------ // 项目通用组件(工具类,常量等) ├─config------------------ // 项目配置 ├─service------------------ // 业务逻辑处理 ├─infrastructur---------- // 项目基础设施,如ORM、缓存服务、消息队列等基础组件 ├─MainApplication.java---- // 项目启动类 └─trigger----------------- // 项目入口 ├─common ├─http------------------ // http请求 ├─job------------------- // 任务 └─listener-------------- // 事件监听
依赖版本配置
不同的项目初始化方式,支持、生成的依赖版本各有不同,在进行项目配置前,先统一版本信息。
编辑 pom.xml
文件
<?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> <groupId>com.bootemp</groupId> <artifactId>boot3</artifactId> <version>0.0.1</version> <name>boot3</name> <packaging>jar</packaging> <description>从零搭建SpringBoot 3.x项目脚手架</description> <properties> <!-- 定义项目基础 --> <java.version>21</java.version> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 定义SpringBoot依赖版本 --> <spring-boot.version>3.2.5</spring-boot.version> <!-- 定义项目依赖版本 --> <mybatis-plus.version>3.5.4.1</mybatis-plus.version> <redisson.version>3.25.0</redisson.version> <sa-token.version>1.38.0</sa-token.version> <hutool.version>5.8.25</hutool.version> </properties> <dependencyManagement> <dependencies> <!-- 以依赖管理的方式管理SpringBoot依赖版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${spring-boot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <!-- 引入项目依赖 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </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> </dependencies> <build> <!-- 指定构建后的Jar包名 --> <finalName>app</finalName> <plugins> <!-- Maven编译配置 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>21</source> <target>21</target> <encoding>UTF-8</encoding> <compilerArgs> <arg>-parameters</arg> </compilerArgs> </configuration> </plugin> <!-- SpringBoot配置 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!-- 指定构建时指定启动文件 --> <mainClass>com.bootemp.boot3.MainApplication</mainClass> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
项目参数配置
spring boot 默认配置文件为 application.properties
, 个人习惯使用 yml 格式。
配置文件规划:
application.yml
- 系统通用配置文件,用于引导加载不同环境配置application-local.yml
- 本地开发环境配置文件,一般在.gitignore
添加忽略,避免个人使用习惯“污染”项目配置application-dev.yml
- 开发环境配置文件application-prod
- 生产环境配置文件
当前为演示项目,仅配置application.yml
和application-local.yml
文件,项目只进行最简配置,对特定参数如数据库连接池参数有要求等,请自行添加。
如环境配置中存在与
application.yml
相同配置会覆盖配置
application. yml
server: port: 8080 servlet: context-path: /boot3 shutdown: graceful logging: file: path: ./logs level: com.bootemp: debug spring: application: name: boot3 mvc: pathmatch: matching-strategy: ant_path_matcher main: banner-mode: off
application-local. yml
spring: datasource: # 数据库驱动 driver-class-name: org.postgresql.Driver # 数据库连接地址 url: jdbc:postgresql://127.0.0.1:5432/boot3 # 数据库用户名 username: postgres # 数据库密码 password: postgres
测试 Controller
package com.bootemp.boot3.trigger.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/") public String hello() { return "Hello, SpringBoot 3.2.5!"; } }
启动项目,基础配置完成
访问测试接口
最后项目结构
├─logs ├─pom.xml └─src ├─main │ ├─java │ │ └─com │ │ └─bootemp │ │ └─boot3 │ │ ├─common │ │ ├─config │ │ ├─infrastructur │ │ ├─MainApplication.java │ │ ├─service │ │ └─trigger │ │ ├─controller │ │ │ └─HelloController.java │ │ ├─job │ │ └─listener │ └─resources │ ├─application-local.yml │ └─application.yml └─test