Druid是阿里巴巴开源的一个高性能的Java数据库连接池组件,它提供了强大的监控统计功能和工具支持。Druid不仅可以作为一个数据库连接池,还提供了SQL解析、SQL统计、SQL慢SQL日志等功能。
下面是对Druid配置的一些关键点的详细介绍:
引入Druid组件(maven)
- springboot
<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.23</version>
</dependency>
- 单独使用
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.23</version>
</dependency>
配置数据源
Druid配置项
1. 数据源配置
Druid数据源的基本配置项包括:
- driverClassName:指定JDBC驱动的全限定名。
- url:数据库连接的URL。
- username:数据库用户名。
- password:数据库密码。
- initialSize:初始化时建立物理连接的个数。
- minIdle:最小空闲连接数。
- maxActive:最大活跃连接数。
- maxWait:获取连接时的最大等待毫秒数,如果超过这个时间还没有可用的连接,则抛出异常。
- timeBetweenEvictionRunsMillis:两个连接池维护线程检查之间的时间间隔。
- minEvictableIdleTimeMillis:一个连接至少停留在空闲状态的时间才有可能被驱逐。
空闲连接释放时间
- validationQuery:用来验证连接有效性的SQL语句。
很重要, 默认为null, 只有开启了才能使用
连接有效性校验功能
- testWhileIdle:申请连接前进行验证,如果为true,则进行空闲连接的有效性校验。
在minEvictableIdleTimeMillis时间内不再执行校验, 超出后校验
- testOnBorrow:申请连接时进行验证。
开启时影响性能,所以不建议开启
- testOnReturn:归还连接时进行验证。
开启时影响性能, 不建议开启
- poolPreparedStatements:是否缓存PreparedStatement,默认为false。
- maxPoolPreparedStatementPerConnectionSize:每个连接上PreparedStatement的最大数量。
- filters:配置监控统计拦截的filters,常用的有stat,log4j,wall等。
2. 监控配置
Druid提供了一个web控制台来监控连接池的状态,可以通过以下配置启用:
- webStatFilter.enabled=true:开启Web监控页面。
- statViewServlet.enabled=true:开启监控页面。
- statViewServlet.urlPattern=/druid/*:设置监控页面的路径。
- statViewServlet.resetEnabled=false:是否允许重置统计数据。
3. 安全配置
为了保护监控页面的安全,可以配置登录账号和密码:
- statViewServlet.loginUsername=admin
- statViewServlet.loginPassword=admin
4. SQL拦截配置
Druid支持SQL拦截,可以记录SQL执行情况,用于调试和性能优化:
- filters=stat,wall,slf4j:配置三个过滤器,分别是统计、防火墙、日志。
- wallEnabled=true:启用SQL防火墙。
- wall.rejectUrl=/druid/sql.html:SQL防火墙拒绝后重定向的地址。
- wall.sqlStatEnabled=true:开启SQL统计。
- wall.logSlowSql=true:记录慢SQL。
- wall.logSlowSqlMs=2000:慢SQL的阈值,单位是毫秒。
示例配置
- 参考配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}" />
<property name="username" value="${jdbc_user}" />
<property name="password" value="${jdbc_password}" />
<property name="filters" value="stat" />
<property name="maxActive" value="20" />
<property name="initialSize" value="1" />
<property name="maxWait" value="6000" />
<property name="minIdle" value="1" />
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<property name="poolPreparedStatements" value="true" />
<property name="maxOpenPreparedStatements" value="20" />
<property name="asyncInit" value="true" />
</bean>
以上配置仅作为参考,实际使用时应根据具体需求调整各项参数。