SpringBoot如何使用Druid数据库连接池



1.Druid 简介

Druid 是一个关系型数据库连接池,它是阿里巴巴的一个开源项目。Druid 支持所有 JDBC 兼容的数据库。Druid 在监控、可拓展性、稳定性和性能方面具有明显的优势。通过 Druid 提供的监控功能,可以实时观察数据库连接池和 SQL 查询的工作情况。


2.集成Druid 数据库连接池和监控

2.1 如何使用

  1. 在 Spring Boot 项目中加入 druid-spring-boot-starter依赖

    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>druid-spring-boot-starter</artifactId>
       <version>1.1.17</version>
    </dependency>
    
  2. 添加配置

    spring.datasource.url= 
    spring.datasource.username=
    spring.datasource.password=
    # ...其他配置(可选,不是必须的,使用内嵌数据库的话上述三项也可省略不填)
    

2.2 配置属性

通过 Spring Boot 配置文件来配置 Druid 数据库连接池和监控,如果没有配置则使用默认值。

  • 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=
    
  • 连接池配置

    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 DruidDataSource类中可以找到
    
  • 监控配置

    # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
    spring.datasource.druid.web-stat-filter.enabled= #是否启用StatFilter默认值false
    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=
    
    # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
    spring.datasource.druid.stat-view-servlet.enabled= #是否启用StatViewServlet(监控页面)默认值为false(考虑到安全问题默认并未启动,如需启用建议设置密码或白名单以保障安全)
    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.*,配置多个英文逗号分隔
    

2.3 多数据源配置

  1. 添加配置

    spring.datasource.url=
    spring.datasource.username=
    spring.datasource.password=
    
    # Druid 数据源配置,继承spring.datasource.* 配置,相同则覆盖
    ...
    spring.datasource.druid.initial-size=5
    spring.datasource.druid.max-active=5
    ...
    
    # Druid 数据源 1 配置,继承spring.datasource.druid.* 配置,相同则覆盖
    ...
    spring.datasource.druid.one.max-active=10
    spring.datasource.druid.one.max-wait=10000
    ...
    
    # Druid 数据源 2 配置,继承spring.datasource.druid.* 配置,相同则覆盖
    ...
    spring.datasource.druid.two.max-active=20
    spring.datasource.druid.two.max-wait=20000
    

    强烈注意 : Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效。

  2. 创建数据源

    @Primary
    @Bean
    @ConfigurationProperties("spring.datasource.druid.one")
    public DataSource dataSourceOne(){
        return DruidDataSourceBuilder.create().build();
    }
    @Bean
    @ConfigurationProperties("spring.datasource.druid.two")
    public DataSource dataSourceTwo(){
        return DruidDataSourceBuilder.create().build();
    }
    

    @Primary 注解指示当多个候选项符合自动连接单值依赖项的条件时,应优先考虑bean。如果一个 “primary” bean存在于候选对象中,它将是自动生成的值。

2.4 Filter 配置

通过 spring.datasource.druid.filters=stat,wall,log4j...的方式来启用相应的内置Filter,不过这些Filter都是默认配置。如果默认配置不能满足你的需求,你可以放弃这种方式,通过配置文件来配置Filter,下面是例子。

# 配置StatFilter 
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.db-type=h2
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000

# 配置WallFilter 
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=h2
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false

# 其他 Filter 配置不再演示

要想使自定义 Filter 配置生效需要将对应 Filter 的 enabled 设置为 true ,Druid Spring Boot Starter 默认禁用 StatFilter,你也可以将其 enabled 设置为 true 来启用它。

2.5 配置 StatFilter, 统计监控信息

2.5.1 如何在web.xml中配置

  • 配置文件:
spring.datasource.druid.filters=stat
  • 界面配置:

    StatViewServlet用于展示Druid 的统计信息。提供了监控信息展示的html 页面以及JSON API。

    配置 web.xml

      <servlet>
          <servlet-name>DruidStatView</servlet-name>
          <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
      </servlet>
      <servlet-mapping>
          <servlet-name>DruidStatView</servlet-name>
          <url-pattern>/druid/*</url-pattern>
      </servlet-mapping>
    

    首页地址为/druid/index.html

    • 配置监控页面访问密码

      配置Servlet的 loginUsernameloginPassword这两个初始参数。

      <!-- 配置 Druid 监控信息显示页面 -->  
      <servlet>  
          <servlet-name>DruidStatView</servlet-name>  
          <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>  
          <init-param>  
      	<!-- 允许清空统计数据 -->  
      	<param-name>resetEnable</param-name>  
      	<param-value>true</param-value>  
          </init-param>  
          <init-param>  
      	<!-- 用户名 -->  
      	<param-name>loginUsername</param-name>  
      	<param-value>druid</param-value>  
          </init-param>  
          <init-param>  
      	<!-- 密码 -->  
      	<param-name>loginPassword</param-name>  
      	<param-value>druid</param-value>  
          </init-param>  
      </servlet>  
      <servlet-mapping>  
          <servlet-name>DruidStatView</servlet-name>  
          <url-pattern>/druid/*</url-pattern>  
      </servlet-mapping>  
      
    • 配置 allow 和 deny

      如果需要做访问控制,可以配置 allow 和 deny 这两个参数。

       <servlet>
            <servlet-name>DruidStatView</servlet-name>
            <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
        	<init-param>
        		<param-name>allow</param-name>
        		<param-value>128.242.127.1/24,128.242.128.1</param-value>
        	</init-param>
        	<init-param>
        		<param-name>deny</param-name>
        		<param-value>128.242.127.4</param-value>
        	</init-param>
        </servlet>
      
    • 配置 resetEnable

      在StatViewSerlvet输出的html页面中,有一个功能是Reset All,执行这个操作之后,会导致所有计数器清零,重新计数。你可以通过配置参数关闭它。

        <servlet>
            <servlet-name>DruidStatView</servlet-name>
            <servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
        	<init-param>
        		<param-name>resetEnable</param-name>
        		<param-value>false</param-value>
        	</init-param>
        </servlet>
      

2.5.2 如何使用 Spring Boot 来配置

以上的所有配置通过下面的 Java 配置类即可完成:

@Configuration
public class ServletConfig extends SpringBootServletInitializer {

    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
        servletRegistrationBean.addInitParameter("resetEnable","true");
        servletRegistrationBean.addInitParameter("loginUsername","druid");
        servletRegistrationBean.addInitParameter("loginPassword","druid");
        return servletRegistrationBean;
    }
}

如果你觉得我的文章对你有所帮助,欢迎关注我的公众号。赞!我与风来
认认真真学习,做思想的产出者,而不是文字的搬运工。错误之处,还望指出!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值