第九节 SpringBoot使用数据库连接池

一、使用Druid数据库连接池

        数据库连接池只有手动配置,才知道具体的过程。以前都是搭建好的项目,现在自己手动搭建一次。还遇到了不少坑。首先是,阿里巴巴的数据库连接池版本与SpringBoot版本会有一定的关系。好了,废话不多说。

        (1)导入依赖。

    <properties>
        <springboot.druid.starter.version>1.1.21</springboot.druid.starter.version>
        <springboot.mybatis.starter.version>2.1.0</springboot.mybatis.starter.version>
    </properties>

        <!-- druid start-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>${springboot.druid.starter.version}</version>
        </dependency>
        <!-- mybatis依赖可拿到了JDBC得依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>${springboot.mybatis.starter.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.55</version>
        </dependency>
        <!-- druid end-->

        (2)然后在yml中加入如下配置。我这里自己遇到的坑就是,SpringBoot版本与druid版本不兼容,所以加入了main下面的配置。

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      # 配置数据源类型
      url: jdbc:mysql://localhost:3306/basessm?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
      username: root
      password: 3333
      # 初始化,最小,最大连接数
      initialSize: 10
      minidle: 10
      maxActive: 18
      # 获取数据库连接等待的超时时间
      maxWait: 60000
      # 配置多久进行一次检测,检测需要关闭的空闲连接 单位毫秒
      timeBetweenEvictionRunsMillis: 60000
      #配置测试查询语句
      validationQuery: SELECT 1 FROM dual
      # 配置监控统计拦截的filters,去掉后,监控界面的sql无法统计
      filters: stat,wall

        (3)配置SQL监控的控制台

package com.zhoutianyu.learnspringboot.database;

import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 参考https://www.cnblogs.com/NeverCtrl-C/p/8024580.html
 */
@Configuration
public class DruidConfig {

    @Bean
    public ServletRegistrationBean statViewServlet() {
        //创建servlet注册实体
        ServletRegistrationBean servletRegistrationBean = 
               new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        //设置ip白名单
        servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
        //设置ip黑名单,如果allow与deny共同存在时,deny优先于allow
        servletRegistrationBean.addInitParameter("deny", "192.168.0.19");
        //设置控制台管理用户
        servletRegistrationBean.addInitParameter("loginUsername", "admin");
        servletRegistrationBean.addInitParameter("loginPassword", "admin");
        //是否可以重置数据
        servletRegistrationBean.addInitParameter("resetEnable", "false");
        return servletRegistrationBean;
    }

    @Bean
    public FilterRegistrationBean statFilter() {
        //创建过滤器
        FilterRegistrationBean filterRegistrationBean = 
               new FilterRegistrationBean(new WebStatFilter());
        //设置过滤器过滤路径
        filterRegistrationBean.addUrlPatterns("/*");
        //忽略过滤的形式
        filterRegistrationBean.
             addInitParameter("exclusions",
                     "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
        return filterRegistrationBean;
    }
}

        经过上面的三步配置后,就能够使用阿里巴巴的数据库连接池了。

二、测试

         启动项目。控制台打印出成功初始化Druid数据库连接池的日志。说明集成成功。公司里一般用于慢查询监控。

         访问SQL监控页面:http://localhost:8081/study/springboot/druid/login.html。输入账号密码admin、admin。

三、加密

        因为连接的是阿里巴巴数据源的jar是druid-1.1.21.jar,因此可以输入命令

java -cp druid-1.1.21.jar com.alibaba.druid.filter.config.ConfigTools 你的密码

 

        因此,需要配置passwordconnectionProperties与开启解密功能config.enabled

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    druid:
      # 配置数据源类型
      url: jdbc:mysql://localhost:3306/basessm?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
      username: root
      password: fD520yBjHVmHK/jBzMvJNnhUhigWgDgkxLChwzwWvO3Eco3++cO+zq0RGqo1qWb9rFF/A+rfiAJJoKrtv9BZhA==
      # 初始化,最小,最大连接数
      initialSize: 10
      minidle: 10
      maxActive: 18
      # 获取数据库连接等待的超时时间
      maxWait: 60000
      # 配置多久进行一次检测,检测需要关闭的空闲连接 单位毫秒
      timeBetweenEvictionRunsMillis: 60000
      #配置测试查询语句
      validationQuery: SELECT 1 FROM dual
      # 配置监控统计拦截的filters,去掉后,监控界面的sql无法统计
      filters: stat,wall

      connectProperties:
          config.decrypt: true
          #公钥${publicKey}
          config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJU/4SOVwtf/vbv11EvHjxwshhgR9SpL30I/LPvuOFL28e7sEpW48m3IhDMksLGetqLp/sb3x5AC+N0p48TUwZsCAwEAAQ==
      #开启 druid 密码解密功能
      filter:
        config:
          enabled: true
      #password: fD520yBjHVmHK/jBzMvJNnhUhigWgDgkxLChwzwWvO3Eco3++cO+zq0RGqo1qWb9rFF/A+rfiAJJoKrtv9BZhA==

 

三、源码下载

        本章节项目源码:点我下载源代码

        目录贴:跟着大宇学SpringBoot-------目录帖

 

posted @ 2022-07-17 12:14  小大宇  阅读(1172)  评论(0编辑  收藏  举报