springboot 使用Druid数据库连接池

Druid 阿里开源的数据库连接池

选择的理由:

  • Druid 经历了阿里双十一的场景,足以可见其性能。
  • Druid 有完整的监控,可以实时监控数据库状态及sql的执行时间。
  • 提供有丰富的监控器,自定义监控器也很方便。

springboot 默认的连接池是HikariCP,使用Druid :

  • 引入jar 包。
        <!--数据库连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
  • 在application.properties 里配置相关属性:
    #连接池配置
    #<!-- 配置初始化大小、最小、最大 -->
    spring.datasource.druid.initial-size=5
    spring.datasource.druid.min-idle=10
    spring.datasource.druid.max-active=20
    
    #<!-- 配置获取连接等待超时的时间 60秒-->
    spring.datasource.druid.max-wait=60000
    #<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    spring.datasource.druid.time-between-eviction-runs-millis=60000
    #<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    spring.datasource.druid.min-evictable-idle-time-millis=60000
    #spring.datasource.druid.max-evictable-idle-time-millis=90000
    
    #是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
    spring.datasource.druid.max-open-prepared-statements= -1
    #检测连接是否有效的语句,及超时时间
    spring.datasource.druid.validation-query=SELECT 1
    spring.datasource.druid.validation-query-timeout=30
    #申请连接是否检测,归还连接是否检测 ,空闲是否检测
    spring.datasource.druid.test-on-borrow=false
    spring.datasource.druid.test-on-return=false
    spring.datasource.druid.test-while-idle=true
    
    #druid 日志输出
    spring.datasource.druid.filter.slf4j.enabled=true 
    spring.datasource.druid.filter.slf4j.statement-create-after-log-enabled=false 
    spring.datasource.druid.filter.slf4j.statement-close-after-log-enabled=false 
    spring.datasource.druid.filter.slf4j.result-set-open-after-log-enabled=false 
    spring.datasource.druid.filter.slf4j.result-set-close-after-log-enabled=false
    
    #插件配置 监控统计用的filter:stat
    #日志用的filter:log4j
    #防御sql注入的filter:wall
    spring.datasource.druid.filters=stat,wall
    
    # WebStatFilter配置,说明请参考Druid Wiki,配置_配置WebStatFilter
    #sql 合并,慢sql展示监控 超过20秒为慢sql
    spring.datasource.druid.filter.stat.merge-sql=true 
    spring.datasource.druid.filter.stat.log-slow-sql=true
    spring.datasource.druid.filter.stat.slow-sql-millis=20000
    
    spring.datasource.druid.web-stat-filter.enabled= true
    spring.datasource.druid.web-stat-filter.url-pattern=/*
    spring.datasource.druid.web-stat-filter.exclusions=*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*
    spring.datasource.druid.web-stat-filter.session-stat-enable=true
    spring.datasource.druid.web-stat-filter.session-stat-max-count=10
    #spring.datasource.druid.web-stat-filter.principal-session-name=admin
    #spring.datasource.druid.web-stat-filter.principal-cookie-name=admin
    #spring.datasource.druid.web-stat-filter.profile-enable=true
    
    # StatViewServlet配置,说明请参考Druid Wiki,配置_StatViewServlet配置
    spring.datasource.druid.stat-view-servlet.enabled= true
    spring.datasource.druid.stat-view-servlet.url-pattern=/druid/*
    spring.datasource.druid.stat-view-servlet.reset-enable=false
    spring.datasource.druid.stat-view-servlet.login-username=admin
    spring.datasource.druid.stat-view-servlet.login-password=admin
    #Ip白名单 黑名单 黑名单优先,黑名单中存在就不可访问。
    #spring.datasource.druid.stat-view-servlet.allow=
    #spring.datasource.druid.stat-view-servlet.deny=
    
    # AOP 监控拦截切入点
    spring.datasource.druid.aop-patterns=com.example.demo.mapper.*,com.example.demo.service.*,com.example.demo.web.*
    

     

  • 启动项目进行访问。可以看到执行 的sql的详细信息。

这里输出的数据库日志采用logback,详细配置如下:

<!-- druid 数据库连接池日志输出-->
    <appender name="druidSqlRollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender" >
        <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss}] %-5level %L %M - %msg%xEx%n</pattern>
        </encoder>
        <file>${ROOT_LOG_DIR}/druid-sql.log</file>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${ROOT_LOGBAK_DIR}/%d{yyyy-MM-dd}/api-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
            <!-- 单个日志文件最多 100MB, 100天的日志周期,最大不能超过1000GB -->
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>100</maxHistory>
            <maxHistory>100GB</maxHistory>
        </rollingPolicy>
    </appender>
<!--记录druid-sql的记录-->
    <logger name="druid.sql.Statement" level="debug" additivity="false">
        <appender-ref ref="druidSqlRollingFile"/>
    </logger>
  • 可以看到日志输出:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值