jdbc配置文件:
#jdbc驱动
jdbc.driver=oracle.jdbc.driver.OracleDriver
#url
jdbc.url=jdbc:oracle:thin:@localhost:端口:服务
#用户名
jdbc.user=用户名
#密码
jdbc.pwd=密码
#最大连接数
jdbc.maxActive=20
#初始化大小
jdbc.initialSize=1
#最小空闲数
jdbc.minIdle=1
#连接数据库最大等待时间(单位:毫秒)
jdbc.maxWait=60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接(单位:毫秒)
jdbc.timeBetweenEvictionRunsMillis=60000
#配置一个连接在池中最小生存的时间(单位:毫秒 最小时间30秒)
jdbc.minEvictableIdleTimeMillis=300000
#通过select 'x' 验证使用的sql是否有效
jdbc.validationQuery=SELECT 'x' FROM DUAL
#与timeBetweenEvictionRunsMillis一起使
jdbc.testWhileIdle=true
#与testOnReturn一起使用 SpringBoot默认使用pool2设置为true不建议使用
jdbc.testOnBorrow=false
jdbc.testOnReturn=false
jdbc.poolPreparedStatements=true
jdbc.maxPoolPreparedStatementPerConnectionSize=20
druid的连接池配置:
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<!-- 基本属性 url、user、password -->
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_user}"/>
<property name="password" value="${jdbc_password}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="1"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="20"/>
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒-->
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x' from dual "/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<!--配置监控统计拦截的filters -->
<property name="filters" value="stat"/>
</bean>
通常来说,只需要修改initialSize、minIdle、maxActive。
注意事项
如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。
removeabandoned不建议在生产环境中打开
如果用SQL Server,建议追加配置
validationQuery不同数据库的使用
数据库 | 测试/验证查询 |
---|---|
MySQL | SELECT 1 |
PostgreSQL | SELECT 1 |
Microsoft SQL Server | SELECT 1 |
SQLite | SELECT 1 |
H2 | SELECT 1 |
Ingres | SELECT 1 |
Oracle | select 1 from dual |
DB2 | select 1 from sysibm.sysdummy1 或 SELECT current date FROM sysibm.sysdummy1 |
Apache Derby | VALUES 1 FROM SYSIBM.SYSDUMMY1 或 SELECT 1 FROM SYSIBM.SYSDUMMY1 |
HSQLDB | SELECT 1 FROM any_existing_table WHERE 1=0 或 SELECT 1 FROM INFORMATION_SCHEMA.SYSTEM_USERS |
Informix | select count(*) from systables |
duild默认值
配置 | 缺省值 | 说明 |
name | NULL | 配置这个属性的意义在于,如果存在多个数据源,监控的时候 |
jdbcUrl | NULL | 连接数据库的url,不同数据库不一样。例如: |
username | NULL | 连接数据库的用户名 |
password | NULL | 连接数据库的密码。如果你不希望密码直接写在配置文件中, |
driverClassName | 根据url自动识别 | 这一项可配可不配,如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName |
initialSize | 0 | 初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时 |
maxActive | 8 | 最大连接池数量 |
maxIdle | 8 | 已经不再使用,配置了也没效果 |
minIdle | 0 | 最小连接池数量 |
maxWait |
-1 | 获取连接时最大等待时间,单位毫秒。配置了maxWait之后, |
poolPreparedStatements | false | 是否缓存preparedStatement,也就是PSCache。 |
maxOpenPreparedStatements | -1 | 要启用PSCache,必须配置大于0,当大于0时, |
validationQuery | NULL | 用来检测连接是否有效的sql,要求是一个查询语句。 |
testOnBorrow | false | 申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。 |
testOnReturn | false | 归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能 |
testWhileIdle | true
| 建议配置为true,不影响性能,并且保证安全性。 |
timeBetweenEvictionRunsMillis | 60*1000L
| 有两个含义: |
numTestsPerEvictionRun |
| 不再使用,一个DruidDataSource只支持一个EvictionRun |
minEvictableIdleTimeMillis |
|
|
connectionInitSqls |
| 物理连接初始化的时候执行的sql |
exceptionSorter | 根据dbType自动识别 | 当数据库抛出一些不可恢复的异常时,抛弃连接 |
filters |
| 属性类型是字符串,通过别名的方式配置扩展插件, |
proxyFilters |
| 类型是List<com.alibaba.druid.filter.Filter>, |