搭建SpringBoot工程并集成Druid
前言
在前一节我们介绍到,本项目采用前后端分离的架构,后端主要采用 Spring Boot 框架,今天我们就先将后端工程搭建起来。
环境准备
- jdk17:java version “17.0.9”;Spring Boot 3.x 需要 jdk17 及以上;
- maven3.x:Apache Maven 3.6.1;maven 3.3以上版本;
- IntelliJ IDEA:IntelliJ IDEA 2022.2.3;
- mysql:Mysql-8.0.35;
- Lombok插件;
tips:以上只是我的版本,不是一定要和我的版本一致的。
创建工程
本项目中,我们使用的 IDE 工具是 IDEA 2022.2.3版本,可能和大家的版本不太一样,但是创建的步骤都是一样哒。
Spring Initializr 方式创建工程
点击 File -> New -> Project…,然后选择 Spring Initializr
如上图,需要选择 jdk 的版本,Spring Boot 3.x 只支持 jdk 17 及以上版本,所以各位如果没有 jdk 17 或者之上的版本,就要先去下载一个了。
tips:使用IDEA Spring Initializr创建项目其实就是集成了springboot官网提供的 Spring Initializr 模板来创建项目,是需要连接网络的,如果没有网络,建议使用maven方式创建项目。
选择工程依赖
我们在这里先选择如下依赖,其他依赖,等到需要用到的时候再添加,更能清楚没个依赖都是用来做什么的。
如上图所示, spring boot 版本为 3.2.0 (话说,springboot 的版本也更新的太快了吧。。。),还有一点需要注意的是,我们导入了 Lombok
的依赖,所以我们需要在 IDEA 中下载 Lombok
的插件,否则 Lombok
不会生效。
项目目录结构
项目结构如下图,我一般是先删除 Maven Wrapper
和 HELP.md
文件,然后将启动类改为 Application.class
(多模块工程就别这样改了,要不然分不清,我只是强迫症),然后再将 application.properties
改为 application.yml
文件。
我个人整理之后的目录结构,强迫症来着,你们可以选择不用改
tips:可以使用 mvnw 脚本执行 Spring Boot Maven 插件,从而运行 Spring Boot 程序
项目 POM 文件
<?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>3.2.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.xm</groupId>
<artifactId>xm-admin</artifactId>
<version>1.0</version>
<name>xm-admin</name>
<description>xm-admin 后台管理系统</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</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>
</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>
</project>
运行工程
直接运行 Application.class
中的 main 方法即可运行 Spring Boot 程序,Spring Boot 就是这么便捷。
tips:如果对 yaml 文件还不熟悉的话,可以去康我的另一个博客,写的很详细哦(传送门)。
配置工程相关信息
将 application.yml 复制修改一份为 application-dev.yml,application.yml 配置文件存放公共的配置,application-{profile}.yml 配置文件则存放不同环境的配置。
编写 application.yml 文件,修改一些公共的参数,如项目路径,项目名称,Tomcat 等配置
server:
# 运行端口
port: 9527
# 项目路径
servlet:
context-path: /xm
# 都是给的默认值,可以不配,只是告诉大家 spring boot starter 大都都是修改参数就行
tomcat:
# uri 解析编码
uri-encoding: UTF-8
# 最大连接数
max-connections: 8192
threads:
# 最大工作线程
max: 200
# 最小工作线程
min-spare: 10
spring:
# 程序名称
application:
name: xm-admin
# 运行环境(dev、test、prod)
profiles:
active: dev
配置 Druid 数据库连接池
在项目中我们一般不会直接使用原生 JDBC 连接数据库,而是配置数据库连接池,在 Spring Boot 2.x 版本中,默认的数据库连接池从之前的 tomcat-pool 换成 HikariCP
,因为HikariCP
连接池性能格外优异,不过我还是喜欢用 druid
连接池,虽然在性能上不如 HikariCP
,但是druid
能够提供强大的监控和扩展功能,而且 druid
的性能也是很优秀的,只是比 HikariCP
慢上一些,使用本项目我们使用 druid
连接池。
添加POM依赖
<properties>
<druid.version>1.2.20</druid.version>
</properties>
<!-- jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- druid 数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-3-starter</artifactId>
<version>${druid.version}</version>
</dependency>
添加配置
添加druid的启动器后,我们还需要自定义druid的相关配置,编写 application-dev.yml 文件
spring:
# 配置数据源
datasource:
# 数据库连接池类型
type: com.alibaba.druid.pool.DruidDataSource
# mysql 6.0 以上的新驱动类
driver-class-name: com.mysql.cj.jdbc.Driver
# 新驱动类在 URL 中需要加上时区配置 serverTimezone=GMT%2B8(东八区),否则会插入数据可能会有时差
url: jdbc:mysql://localhost:3306/xm_admin?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=GMT%2B8
username: xm
password: xm-admin
# 配置 Alibaba Druid 连接池
druid:
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 最大连接池数量 maxIdle已经不再使用
max-active: 20
# 初始化时建立物理连接的个数
initial-size: 1
# 获取连接时最大等待时间,单位毫秒
max-wait: 60000
# 最小连接池数量
min-idle: 1
# 既作为检测的间隔时间又作为testWhileIdel执行的依据
time-between-eviction-runs-millis: 60000
# 销毁线程时检测当前连接的最后活动时间和当前时间差大于该值时,关闭当前连接
min-evictable-idle-time-millis: 300000
# 用来检测连接是否有效的sql 必须是一个查询语句 mysql中为 select 'x' oracle中为 select 1 from dual
validation-query: select 'x'
# 申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
test-while-idle: true
# 申请连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-borrow: false
# 归还连接时会执行validationQuery检测连接是否有效,开启会降低性能,默认为true
test-on-return: false
# 是否缓存preparedStatement,也就是PSCache 官方建议MySQL下建议关闭 个人建议如果想用SQL防火墙 建议打开
pool-prepared-statements: false
max-open-prepared-statements: 20
#当值大于0时poolPreparedStatements会自动修改为true
max-pool-prepared-statement-per-connection-size: 20
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connect-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
use-global-data-source-stat: true
# 基础监控配置
web-stat-filter:
enabled: true
# 添加过滤规则
url-pattern: /*
# 设置忽略哪些URL
exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
session-stat-enable: true
session-stat-max-count: 100
#设置视图拦截,访问druid监控页的账号和密码,默认没有
stat-view-servlet:
enabled: true
# 访问路径为/druid时,跳转到StatViewServlet
url-pattern: /druid/*
reset-enable: true
# 设置监控页面的登录名和密码
login-username: admin
login-password: admin
# 白名单ip
allow: 127.0.0.1
# 黑名单(共同存在时,deny优先于allow)
#deny: localhost
添加完配置后,就可以直接启动程序了,因为 Spring Boot 会自动将这些配置加载进去。我们来查看一下启动日志
tips:当然,这里要先安装并且启动mysql,并且创建mysql库,安装mysql可以查看我的另外一篇文章(window 安装 mysql 8.x)。
如上图所示,可以很明确的看到我们的 Druid 连接池已经创建完成,这个时候我们就可以在页面上监控我们的数据源了(如下图),访问我们配置好的路径 /druid/*
,即访问 http://localhost:9527/xm/druid/ 就会被跳转到监控页面,由于我们配置了用户名和密码,所以需要进行登录,默认不用登录。
总结
到这里,我们的后端工程就算是搭建完成了,这节的知识点都是最最最基础的知识点了,如果还有小伙伴不懂的,还是可以问我的,有问必答!或者可以看我的另外两篇关于 Spring Boot 的博客。后面的博客应该就是关于统一结果返回,统一异常处理和统一日志等等功能了。