SpringBoot--使用Druid(德鲁伊)数据源

Posted Z && Y

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot--使用Druid(德鲁伊)数据源相关的知识,希望对你有一定的参考价值。

01: Druid(德鲁伊)数据源简介
02: 使用Druid(德鲁伊)数据源
03: 配置Druid(德鲁伊)数据源监控

1.1 使用Druid(德鲁伊)数据源


1.1.1 添加上 Druid 数据源依赖

pom.xml

<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.6</version>
</dependency>

1.1.2 切换数据源

Spring Boot 2.0 以上默认使用 com.zaxxer.hikari.HikariDataSource 数据源,但可以 通过 spring.datasource.type 指定数据源。

在这里插入图片描述

application.yaml

spring:
              datasource:
                username: root
                password: 317525
                url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
                driver-class-name: com.mysql.cj.jdbc.Driver
                type: com.alibaba.druid.pool.DruidDataSource # 自定义数据源

1.1.3 测试是否切换成功

数据源切换之后,在测试类中注入 DataSource,然后获取到它,输出一看便知是否成功切换;
在这里插入图片描述

SpringbootDataJdbcApplicationTests.java

package com.tian.springbootdatajdbc;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@SpringBootTest
class SpringbootDataJdbcApplicationTests {

    //DI注入数据源
    @Autowired
    DataSource dataSource;

    @Test
    public void contextLoads() throws SQLException {
        //看一下默认数据源 com.zaxxer.hikari.HikariDataSource
        System.out.println("默认数据源: " + dataSource.getClass());
        //获得连接
        Connection connection = dataSource.getConnection();
        System.out.println("当前连接: " + connection);
        //关闭连接
        connection.close();
    }

}

运行结果:
在这里插入图片描述


1.1.4 进行参数设置

切换成功!既然切换成功,就可以设置数据源连接初始化大小、最大连接数、等待时间、最小连接数 等设置项;可以查看源码

安装log4j依赖: 后面会使用到

pom.xml

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

在这里插入图片描述

application.yaml

spring:
  datasource:
    username: root
    password: 317525
    # serverTimezone=UTC 设置时区
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource # 自定义数据源

    #Spring Boot 默认是不注入这些属性值的,需要自己绑定
    #druid 数据源专有配置
    initialSize: 5
    minIdle: 5
    maxActive: 20
    maxWait: 60000
    timeBetweenEvictionRunsMillis: 60000
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    poolPreparedStatements: true

    #配置监控统计拦截的filters,stat:监控统计、log4j:日志记录、wall:防御sql注入
    #如果允许时报错  java.lang.ClassNotFoundException: org.apache.log4j.Priority
    #则导入 log4j 依赖即可,Maven 地址:https://mvnrepository.com/artifact/log4j/log4j
    filters: stat,wall,log4j
    maxPoolPreparedStatementPerConnectionSize: 20
    useGlobalDataSourceStat: true
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500

1.1.5 为 DruidDataSource 绑定全局配置文件

现在需要程序员自己为 DruidDataSource 绑定全局配置文件中的参数,再添加到容器中,而不再使用 Spring Boot 的自动生成了;我们需要 自己添加 DruidDataSource 组件到容器中,并绑定属性;

在这里插入图片描述

DruidConfig.java

package com.tian.springbootdatajdbc.config;

import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;

/**
 * ClassName: DruidConfig
 * Description: Druid连接池的配置类
 *
 * @author Tianjiao
 * @date 2021/5/27 9:39
 */
@Configuration
public class DruidConfig {

    /**
     * 将自定义的 Druid数据源添加到容器中,不再让 Spring Boot 自动创建
     * 绑定全局配置文件中的 druid 数据源属性到 com.alibaba.druid.pool.DruidDataSource从而让它们生效
     *
     * @ConfigurationProperties(prefix = "spring.datasource"):作用就是将 全局配置文件中
     * 前缀为 spring.datasource的属性值注入到 com.alibaba.druid.pool.DruidDataSource 的同名参数中
     */
    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource druidDataSource() {
        return new DruidDataSource();
    }
}

1.1.6 去测试类中测试一下

在这里插入图片描述

SpringbootDataJdbcApplicationTests.java

package com.tian.springbootdatajdbc;

import com.alibaba.druid.pool.DruidDataSource;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

@SpringBootTest
class SpringbootDataJdbcApplicationTests {

    //DI注入数据源
    @Autowired
    DataSource dataSource;

    @Test
    public void contextLoads() throws SQLException {
        //看一下默认数据源
        System.out.println("默认数据源:" + dataSource.getClass());
        //获得连接
        Connection connection = dataSource.getConnection();
        System.out.println("当前连接为: " + connection);

        DruidDataSource druidDataSource = (DruidDataSource) dataSource;
        System.out.println("druidDataSource 数据源最大连接数:" + druidDataSource.getMaxActive());
        System.out.println("druidDataSource 数据源初始化连接数:" + druidDataSource.getInitialSize());

        //关闭连接
        connection.close();
    }

}

运行结果:
输出结果 :可见配置参数已经生效
在这里插入图片描述

发现出现了3个警告

解决方法


以上是关于SpringBoot--使用Druid(德鲁伊)数据源的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot--配置Druid(德鲁伊)数据源监控

SpringBoot使用·上篇(SpringBoot注解+集成JDBC+集成druid(德鲁伊)+sql监控)

SpringBoot使用·上篇(SpringBoot注解+集成JDBC+集成druid(德鲁伊)+sql监控)

SpringBoot--整合Mybatis+druid

SpringBoot项目配置模板(SpringBoot + MybatisPlus + Druid)

配置 Druid 数据源及密码加密-SpringBoot 2.7