文章目录
- Druid高性能数据库连接池?SpringBoot整合MyBatis整合SpringMVC整合Druid
- 异常记录
- spring-boot-starter-parent作用
- Druid介绍
- 什么是数据库连接池?
- 为什么选择Druid数据库连接池
- 整合SpringBoot,MyBatis,SpringMVC,Druid到Maven项目的真个流程
- pom文件引入依赖
- 在src/main目录下创建resources目录并创建application.properties配置文件
- 引入Druid监控面板
- 其它细节
Druid高性能数据库连接池?SpringBoot整合MyBatis整合SpringMVC整合Druid
异常记录
项目启动的时候报了下图中的错误,如下图:
org/springframework/boot/bind/RelaxedPropertyResolver。
为什么会报这个错误呢?因为我们pom.xml文件中没有引入spring-boot-starter-parent父版本,引入之后就好了 如下图:
重新启动,如下图:
spring-boot-starter-parent作用
spring-boot-starter-parent 是一个 Maven 项目中用于构建 Spring Boot 应用程序的父项目。它提供了一种标准化的方式来管理和配置 Spring Boot 应用程序的依赖项、插件和默认设置。
spring-boot-starter-parent 的作用包括:
- 继承默认的 Maven 父项目:spring-boot-starter-parent 继承了 Maven 的默认父项目,这意味着你可以利用 Maven 的功能,并继承了一些默认的 Maven 配置。
- 默认的依赖项管理:spring-boot-starter-parent 预定义了许多常用的 Spring Boot 相关依赖项,并使用了适当的版本。这样,你在子项目中不需要显式地声明这些依赖项和版本号,而是直接继承父项目中定义的依赖项。
- 默认的插件配置:spring-boot-starter-parent 配置了一些常用的 Maven 插件,如编译插件、打包插件等,并使用了适当的配置。这样,你在子项目中可以直接使用这些插件,而无需自己进行复杂的插件配置。
通过使用 spring-boot-starter-parent 作为你的 Maven 父项目,你可以节省很多配置和管理的工作,专注于开发 Spring Boot 应用程序的业务逻辑。同时,它也确保了你的项目和依赖项之间的兼容性,并遵循了 Spring Boot 的最佳实践和规范。
使用了spring-boot-starter-parent作为Maven父项目之后,所有的spring-boot-starter开头的依赖都不用再写版本坐标了,可以直接复用父项目里面的 如下图:
Druid介绍
Druid是阿里巴巴的一个开源项目,号称为监控而生的数据库连接池,在功能、性能、扩展性方面都超过其他例如DBCP数据库连接池、C3P0数据库连接池。而且Druid已经在阿里巴巴部署了超过600个应用,通过了极为严格的考验,这才收获了大家的青睐!
什么是数据库连接池?
数据库连接池是一个存储数据库连接的缓冲区,用于重复使用这些连接,以避免在每次请求时都创建新的数据库连接。因为每次连接数据库和断开数据库都是非常耗费性能的。
为什么选择Druid数据库连接池
Druid提供了丰富的监控和统计功能,您可以了解连接池的使用情况、SQL执行情况等。这有助于识别性能问题和优化SQL查询。
整合SpringBoot,MyBatis,SpringMVC,Druid到Maven项目的真个流程
pom文件引入依赖
首先快速创建一个Maven项目,然后引入如下pom依赖 如下:
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>druid</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>druid</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
</parent>
<dependencies>
<!-- 引入SpringBoot的web模块,引入springBoot自带的tomcat服务器,这样才能启动项目服务,比如启动端口号为8080的服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 下面的这个spring-boot-starter-test本次项目并没有使用到,这里只不过是为了测试一下如果上面引入了SpringBoot应用程序
的父项目只会,所有的spring-boot-starter开头的依赖是不是都不用写版本号了,测试发现确实是这样的-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!-- MyBatis和SpringBoot整合 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<!-- Druid数据库连接池和SpringBoot整合 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.15</version>
</dependency>
<!-- JDBC java用来连接并操作mysql数据库的 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- 引入SpringMVC框架 这样就可以在浏览器里面通过写http接口的方式请求我们的项目服务器了 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
在src/main目录下创建resources目录并创建application.properties配置文件
如下图:
配置文件内容如下:
# 数据源配置
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
# MyBatis配置
mybatis.mapper-locations = classpath:mapper/*.xml
mybatis.type-aliases-package=org.example.entity
# Druid数据库连接池配置
spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=20
spring.datasource.druid.max-wait=60000
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=300000
spring.datasource.druid.validation-query=SELECT 1 FROM DUAL
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.pool-prepared-statements=true
spring.datasource.druid.max-pool-prepared-statement-per-connection-size=20
spring.datasource.druid.filters=stat,wall,log4j
spring.datasource.druid.connection-properties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
注意这里的url最后一定要写上serverTimezone要不然会报错启动,如下图:
com.mysql.jdbc.Driver和com.mysql.cj.jdbc.Driver的区别,不带cj的是mysql5版本,带cj的是6及以上。
引入Druid监控面板
只需要在SpringBoot项目中引入一个DruidConfig配置类就可以了,如下图:
/**
* @author xuan
* @create 2024/4/24
*/
@Configuration
public class DruidConfig {
//配置druid的监控
//1.配置管理后台的servlet
@Bean
public ServletRegistrationBean statViewServlet(){
//druid监控页面的url
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");
Map<String,String> initParams = new HashMap<>();
initParams.put("loginUsername","druid"); //登陆用户名
initParams.put("loginPassword","123456"); //密码
initParams.put("allow",""); //允许哪些ip
initParams.put("deny",""); //拒绝ip
bean.setInitParameters(initParams);
return bean;
}
//2.配置一个web监控的filter,监控sql
@Bean
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean bean = new FilterRegistrationBean();
bean.setFilter(new WebStatFilter());
Map<String,String> initParams = new HashMap<>();
initParams.put("exclusions","*.js,*.css,*.html,/druid/*");
bean.setInitParameters(initParams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
/**
* Druid的控制台是监控不了SQL的,解决方案
* */
@Bean
@ConfigurationProperties(prefix = "spring.datasource.druid")
public DataSource druidDataSource() {
DruidDataSource druidDataSource = new DruidDataSource();
return druidDataSource;
}
}
启动项目在浏览器输入,localhost:8080/druid即可显示面板 如下图:
但是会存在一个问题 就是我们的SQL监控中没有已经执行的sql 如下图:
这里是空的,为什么会这样呢?因为我们使用jdbc连接数据库的时候 并没有指定druid数据库连接池 如下图:
加上之后如下图:
重新启动项目 打开druid监控面板 如下图:
sql面板里面就可以输出我们的mysql的sql语句的执行情况了,如上图。
其它细节
其它细节请参照码云:https://gitee.com/xuanyuanzy/druid