Spring Boot 集成 Druid

一、Druid 介绍

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

Druid是一个开源项目,源码托管在github上,源代码仓库地址是 https://github.com/alibaba/druid 。同时每次Druid发布正式版本和快照的时候,都会把源码打包,你可以从上面的下载地址中找到相关版本的源码。

通过Druid连接池中间件, 我们可以实现:

  • 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
  • 替换传统的DBCP和C3P0连接池中间件。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
  • 数据库密码加密。直接把数据库密码写在配置文件中,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
  • SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
  • 扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter-Chain机制,很方便编写JDBC层的扩展插件。

更多详细信息参考官方文档:https://github.com/alibaba/druid/wiki

二、maven 配置

Druid 0.1.18 之后版本都发布到maven中央仓库中,所以你只需要在项目的pom.xml中加上dependency就可以了。例如:

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>

三、连接池配置

3.1 jdbc配置

spring.datasource.druid.url= # 或spring.datasource.url= 
spring.datasource.druid.username= # 或spring.datasource.username=
spring.datasource.druid.password= # 或spring.datasource.password=
spring.datasource.druid.driver-class-name= #或 spring.datasource.driver-class-name=

3.2 连接池配置

spring.datasource.druid.initial-size=
spring.datasource.druid.max-active=
spring.datasource.druid.min-idle=
spring.datasource.druid.max-wait=
spring.datasource.druid.pool-prepared-statements=
spring.datasource.druid.max-pool-prepared-statement-per-connection-size= 
spring.datasource.druid.max-open-prepared-statements= #和上面的等价
spring.datasource.druid.validation-query=
spring.datasource.druid.validation-query-timeout=
spring.datasource.druid.test-on-borrow=
spring.datasource.druid.test-on-return=
spring.datasource.druid.test-while-idle=
spring.datasource.druid.time-between-eviction-runs-millis=
spring.datasource.druid.min-evictable-idle-time-millis=
spring.datasource.druid.max-evictable-idle-time-millis=
spring.datasource.druid.filters= #配置多个英文逗号分隔
....//more

四、监控配置

4.1 内置监控页面

# WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
spring.datasource.druid.web-stat-filter.enabled= #是否启用StatFilter默认值true
spring.datasource.druid.web-stat-filter.url-pattern=
spring.datasource.druid.web-stat-filter.exclusions=
spring.datasource.druid.web-stat-filter.session-stat-enable=
spring.datasource.druid.web-stat-filter.session-stat-max-count=
spring.datasource.druid.web-stat-filter.principal-session-name=
spring.datasource.druid.web-stat-filter.principal-cookie-name=
spring.datasource.druid.web-stat-filter.profile-enable=

4.2 Web和Spring关联监控

# StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
spring.datasource.druid.stat-view-servlet.enabled= #是否启用StatViewServlet默认值true
spring.datasource.druid.stat-view-servlet.url-pattern=
spring.datasource.druid.stat-view-servlet.reset-enable=
spring.datasource.druid.stat-view-servlet.login-username=
spring.datasource.druid.stat-view-servlet.login-password=
spring.datasource.druid.stat-view-servlet.allow=
spring.datasource.druid.stat-view-servlet.deny=

# Spring监控配置,说明请参考Druid Github Wiki,配置_Druid和Spring关联监控配置
spring.datasource.druid.aop-patterns= # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
# 如果spring.datasource.druid.aop-patterns要代理的类没有定义interface请设置spring.aop.proxy-target-class=true

五、数据库密码加密

5.1 配置

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
# 生成的加密后的密码(原密码 123456)
spring.datasource.password=WVMjPhfXQrIsWRo0/RCqAVvYtTU9WNVToKJohb8AlUmHwnV6vwFL+FM2CNFDMJwGHW1iCmyaUlF+sgvFdogqEA==
# 生成的公钥
public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIiwHpFrDijV+GzwRTzWJk8D3j3jFfhsMFJ/7k1NTvBuLgL+TdIHgaMNOIEjHpXzuvX38J3FtOK8hLrySncVGOMCAwEAAQ==
# 配置 connection-properties,启用加密,配置公钥。
spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
# 启用ConfigFilter
spring.datasource.druid.filter.config.enabled=true

5.2 加密代码

import com.alibaba.druid.filter.config.ConfigTools;

public class CreateDruidPwd {

    public static  void  main(String [] args){
        String []  pwd={"123456"};
        try {
            ConfigTools.main(pwd);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

六、完整配置

6.1 maven 配置

Sring Data JPA + Hibernate + Druid + MySQL

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.21</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.17</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

6.2 配置文件

public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJaLvStqBY/2ZsLXTt5S/Zg8I3nlwkihZ6Z+ru8AtxytgB/QD9DtabXP0V0eq8S8pAM9B8QU8ivXbND/wUcUWocCAwEAAQ==
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/validator?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: root
    password: J0+pENapRjdsZnCO/jvdn5d6HtpHPdqdaBob0o04EZ9Q55F5VMq2IF+X040xrg8KGMXeNI/eneq5Ac53ZrOkeg== #生成的加密后的密码(原密码 123456)
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      initial-size: 5 #初始化连接大小
      min-idle: 5 #最小连接池数量
      max-active: 20 #最大连接池数量
      max-wait: 60000 #获取连接时最大等待时间,单位毫秒
      time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
      validation-query: SELECT 1 FROM DUAL   #测试连接
      test-while-idle: true #申请连接的时候检测,建议配置为true,不影响性能,并且保证安全性
      test-on-borrow: false #获取连接时执行检测,建议关闭,影响性能
      test-on-return: false #归还连接时执行检测,建议关闭,影响性能
      pool-prepared-statements: false #是否开启PSCache,PSCache对支持游标的数据库性能提升巨大,oracle建议开启,mysql下建议关闭
      max-pool-prepared-statement-per-connection-size: 20 #开启poolPreparedStatements后生效
      filters: stat,wall,slf4j,config #配置扩展插件,常用的插件有=>stat:监控统计  log4j:日志  wall:防御sql注入
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;config.decrypt=true;config.decrypt.key=${public-key} #通过connectProperties属性来打开mergeSql功能;慢SQL记录
      web-stat-filter: #WebStatFilter用于采集web-jdbc关联监控的数据
        enabled: true #启用StatFilter
        url-pattern: "/*"  #StatFilter过滤匹配
        exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*"
        session-stat-max-count: 1000 #缺省sessionStatMaxCount是1000个。你可以按需要进行配置
        session-stat-enable: false #你可以关闭session统计功能
        profile-enable: true #druid 0.2.7版本开始支持profile,配置profileEnable能够监控单个url调用的sql列表
      stat-view-servlet: #内置监控页面配置
        url-pattern: "/druid/*"
        login-username: admin #用户名
        login-password: admin #密码
        reset-enable: false # 禁用HTML页面上的“Reset All”功能
        allow: 127.0.0.1 #IP白名单 (没有配置或者为空,则允许所有访问)
        deny: #IP黑名单 (存在共同时,deny优先于allow)
        enabled: true
      filter:
        config:
          enabled: true #启用ConfigFilter
        slf4j:
          enabled: true
          statement-create-after-log-enabled: false
          statement-log-enabled: false
          statement-executable-sql-log-enable: true
          statement-log-error-enabled: true
          result-set-log-enabled: false
      aop-patterns: pers.simon.boot.validator.service.* # Spring监控AOP切入点,如x.y.z.service.*,配置多个英文逗号分隔
  aop:
    proxy-target-class: true #要代理的类没有定义interface请设置spring.aop.proxy-target-class=true
  jpa:
    database: MYSQL
    show-sql: true
    hibernate:
      ddl-auto: update
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect

6.3 访问

访问 ip:port/druid 进入Druid监控后台页面

参考

  • https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter
  • https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值