DruidDataSource配置说明

参考文档:https://github.com/alibaba/druid

1. DruidDataSource配置说明

  • name: 配置这个属性的意义在于,如果存在多个数据源,监控的时候可以通过名字来区分开来。如果没有配置,将会生成一个名字,格式是:“DataSource-” + System.identityHashCode(this). 另外配置此属性至少在1.0.5版本中是不起作用的,强行设置name会出错
  • url: 连接数据库的url,不同数据库不一样。例如:mysql : jdbc:mysql://10.20.153.104:3306/druid2
    oracle: jdbc:oracle:thin:@10.20.149.85:1521:ocnauto
  • username: 连接数据库的用户名
  • password: 连接数据库的密码。如果不希望密码直接写在配置文件中,可以使用ConfigFilter。其作用包括:从配置文件中读取配置;从远程http文件中读取配置,查看详情配置
  • driverClassName: 默认可根据URL自动识别。这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName。
  • initialSize: 默认值0。初始化时建立物理连接的个数,初始化发生在显示调用init方法,或者第一次getConnection时。
  • maxActive: 默认值8。最大连接池数量。
  • maxIdle: 已经不再使用,配置了也没效果,可忽略。说明:maxIdle是Druid为了方便DBCP用户迁移而增加的,maxIdle是一个混乱的概念。连接池只应该有maxPoolSize和minPoolSize,druid只保留了maxActive和minIdle,分别相当于maxPoolSize和minPoolSize。
  • minIdle: 最小连接池数量。
  • maxWait: 获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true来使用非公平锁。
  • poolPreparedStatements: 默认值为false。是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
  • maxPoolPreparedStatementPerConnectionSize: 默认值-1。要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100。
  • validationQuery: 用来检测连接是否有效的sql,要求是一个查询语句,常用select ‘X’。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会起作用。
  • validationQueryTimeout: 单位:秒,检测连接是否有效的超时时间。底层调用jdbc Statement对象的void setQueryTimeout(int seconds)方法。
  • testOnBorrow: 默认值为true。申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
  • testOnReturn: 默认值为false。归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
  • testWhileIdle: 默认值为false。建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
  • keepAlive: 1.0.28版本,默认值为false。连接池中的minIdle数量以内的连接,空闲时间超过minEvictableIdleTimeMillis,则会执行keepAlive操作。
  • timeBetweenEvictionRunsMillis: 1.0.14版本,默认值为1分钟,单位毫秒。有两个含义:一个是Destroy线程会检测连接的间隔时间,如果连接空闲时间大于等于minEvictableIdleTimeMillis则关闭物理连接;另一个是testWhileIdle的判断依据,详细看testWhileIdle属性的说明。
  • minEvictableIdleTimeMillis: 连接保持空闲而不被驱逐的最小时间,单位毫秒。
  • numTestsPerEvictionRun: 不再使用,一个DruidDataSource只支持一个EvictionRun。
  • connectionInitSqls: 物理连接初始化的时候执行的sql。
  • exceptionSorter: 默认根据dbType自动识别。当数据库抛出一些不可恢复的异常时,抛弃连接。
  • filters: 属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat、日志用的filter:log4j、防御sql注入的filter:wall。
  • proxyFilters: 类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系。
  • asyncInit: asyncInit是1.1.4中新增加的配置,如果有initialSize数量较多时,打开会加快应用启动时间。
  • maxOpenPreparedStatements: 与maxPoolPreparedStatementPerConnectionSize相同
  • removeAbandoned: 当程序存在缺陷时,申请的连接忘记关闭,这时候,就存在连接泄漏了。Druid提供了RemoveAbandanded相关配置,用来关闭长时间不使用的连接。注:配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈。
  • removeAbandonedTimeout: 连接超时多长时间关闭,单位秒
  • logAbandoned: 关闭abandoned连接时输出错误日志。

2. maven配置

<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>${druid-version}</version>
</dependency>

3. 如果打开Druid的监控统计功能

Druid的监控统计功能是通过filter-chain扩展实现,如果你要打开监控统计功能,配置StatFilter,具体看这里

4. 怎样使用Druid的内置监控页面

内置监控页面是一个Servlet,具体配置看这里

5. 防止sql注入配置

Druid提供了WallFilter,它是基于SQL语义分析来实现防御SQL注入攻击的。具体配置看这里

6. 参考通用配置

DruidDataSource大部分属性都是参考DBCP的,如果你原来就是使用DBCP,迁移是十分方便的。不同业务场景需求不同,以下配置只用来参考:

<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="60000" />
     <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>

7. 连接泄漏监测

参考信息
当程序存在缺陷时,申请的连接忘记关闭,这时候,就存在连接泄漏了。Druid提供了RemoveAbandanded相关配置,用来关闭长时间不使用的连接。例如:

 <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
  	... ...
  	<property name="removeAbandoned" value="true" /> <!-- 打开removeAbandoned功能 -->
  	<property name="removeAbandonedTimeout" value="1800" /> <!-- 1800秒,也就是30分钟 -->
  	<property name="logAbandoned" value="true" /> <!-- 关闭abanded连接时输出错误日志 -->
  	... ...
  </bean>

配置removeAbandoned对性能会有一些影响,建议怀疑存在泄漏之后再打开。在上面的配置中,如果连接超过30分钟未关闭,就会被强行回收,并且日志记录连接申请时的调用堆栈。

内置监控页面查看未关闭连接堆栈信息
当removeAbandoned=true之后,可以在内置监控界面datasource.html中的查看ActiveConnection StackTrace属性的,可以看到未关闭连接的具体堆栈信息,从而方便查出哪些连接泄漏了。

8. 日志记录慢sql

在StatFilter配置中有慢SQL执行日志记录,看这里

9. 如何加密数据库密码

运维和DBA都不希望把密码明文直接写在配置文件中,Druid提供了数据库密码加密的功能。具体看这里

10. DruidDataSource支持哪些数据库?

理论上说,支持所有有jdbc驱动的数据库。实际测试过的有:
mysql 支持,大规模使用
oracle 支持,大规模使用
sqlserver 支持
postgres 支持
db2 支持
h2 支持
derby 支持
sqlite 支持
sybase 支持

11. 如何在Spring Boot中集成Druid连接池和监控?

使用Druid Spring Boot Starter,点击查看

12.如何在Spring Boot中添加自定义WallConfig、Filter ?

点击查看

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值