阿里推出的国产数据库连接池, 据网上测试对比, 比目前的 DBCP 或 C3P0 数据库连接池性能更好. Druid 与其他数据库连接池使用方法基本一样 (与 DBCP 非常相似), 将数据库的连接信息全部配置给 DataSource 对象; 最大的特点是 "可以实现数据库访问的性能监视"
如果要在项目当中去使用 Druid, 强烈建议在 web 项目中使用, 因为可以配置监控, 但是如果现在不需要监控, 则任何项目都可以使用;
1. 依赖包: 把 c3p0 依赖包, 替换为 Druid
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>1.1.17</version>
- </dependency>
2. 修改 database.properties
- # 定义数据库驱动程序名称
- db.druid.driverClassName=org.gjt.mm.MySQL.Driver
- # 数据库连接地址
- db.druid.url=jdbc:MySQL://localhost:3306/yootk
- # 数据库连接用户名
- db.druid.username=root
- # 数据库连接密码
- db.druid.password=mysqladmin
- # 数据库最大连接数
- db.druid.maxActive=1
- # 数据库最小维持连接数
- db.druid.minIdle=1
- # 数据库初始化连接
- db.druid.initialSize=1
- # 数据库连接池最大等待时间
- db.druid.maxWait=30000
- # 配置间隔多久才进行一次检测, 检测需要关闭的空闲连接, 单位是毫秒
- db.druid.timeBetweenEvictionRunsMillis=60000
- # 配置一个连接在池中最小生存的时间, 单位是毫秒
- db.druid.minEvictableIdleTimeMillis=300000
- # 检测查询处理
- db.druid.validationQuery=SELECT 'x'
- # 申请连接的时候检测, 如果空闲时间大于 timeBetweenEvictionRunsMillis, 执行 validationQuery 检测连接是否有效.
- db.druid.testWhileIdle=true
- # 申请连接时执行 validationQuery 检测连接是否有效, 做了这个配置会降低性能
- db.druid.testOnBorrow=false
- # 归还连接时执行 validationQuery 检测连接是否有效, 做了这个配置会降低性能
- db.druid.testOnReturn=false
是否缓存 preparedStatement, 也就是 PSCache.PSCache 对支持游标的数据库性能提升巨大, 比如说 oracle. 在 MySQL 下建议关闭
- db.druid.poolPreparedStatements=false
- # 要启用 PSCache, 必须配置大于 0, 当大于 0 时, poolPreparedStatements 自动触发修改为 true. 在 Druid 中, 不会存在 Oracle 下 PSCache 占用内存过多的问题, 可以把这个数值配置大一些, 比如说 100
- db.druid.maxPoolPreparedStatementPerConnectionSize=20
- # 配置监控统计拦截的 filters, 去掉后监控界面 sql 无法统计,'wall'用于防火墙
- db.druid.filters=stat
3. 修改 Spring 配置文件: 使用 Druid 连接池进行管理
- <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init">
- <property name="driverClassName" value="${db.druid.driverClassName}"/> <!-- 定义数据库驱动程序 -->
- <property name="url" value="${db.druid.url}"/> <!-- 数据库连接地址 -->
- <property name="username" value="${db.druid.username}"/> <!-- 数据库连接用户名 -->
- <property name="password" value="${db.druid.password}"/> <!-- 数据库连接密码 -->
- <property name="maxActive" value="${db.druid.maxActive}"/> <!-- 最大连接数 -->
- <property name="minIdle" value="${db.druid.minIdle}"/> <!-- 最小连接池 -->
- <property name="initialSize" value="${db.druid.initialSize}"/> <!-- 初始化连接大小 -->
- <property name="maxWait" value="${db.druid.maxWait}"/> <!-- 最大等待时间 -->
- <property name="timeBetweenEvictionRunsMillis" value="${db.druid.timeBetweenEvictionRunsMillis}" /> <!-- 配置间隔多久才进行一次检测, 检测需要关闭的空闲连接, 单位是毫秒 -->
- <property name="minEvictableIdleTimeMillis" value="${db.druid.minEvictableIdleTimeMillis}" /> <!-- 配置一个连接在池中最小生存的时间, 单位是毫秒 -->
- <property name="validationQuery" value="${db.druid.validationQuery}" /> <!-- 验证 SQL -->
- <!-- 建议配置为 true, 不影响性能, 并且保证安全性. -->
- <!-- 申请连接的时候检测, 如果空闲时间大于 timeBetweenEvictionRunsMillis, 执行 validationQuery 检测连接是否有效. -->
- <property name="testWhileIdle" value="${db.druid.testWhileIdle}" />
- <property name="testOnBorrow" value="${db.druid.testOnBorrow}" /> <!-- 申请连接时执行 validationQuery 检测连接是否有效, 做了这个配置会降低性能 -->
- <property name="testOnReturn" value="${db.druid.testOnReturn}" /> <!-- 归还连接时执行 validationQuery 检测连接是否有效, 做了这个配置会降低性能 -->
- <!-- 是否缓存 preparedStatement, 也就是 PSCache.PSCache 对支持游标的数据库性能提升巨大, 比如说 oracle. 在 mysql 下建议关闭. -->
- <property name="poolPreparedStatements" value="${db.druid.poolPreparedStatements}" />
- <!-- 要启用 PSCache, 必须配置大于 0, 当大于 0 时, poolPreparedStatements 自动触发修改为 true. 在 Druid 中, 不会存在 Oracle 下 PSCache 占用内存过多的问题, 可以把这个数值配置大一些, 比如说 100 -->
- <property name="maxPoolPreparedStatementPerConnectionSize" value="${db.druid.maxPoolPreparedStatementPerConnectionSize}" />
- <property name="filters" value="${db.druid.filters}" /> <!-- 配置监控统计拦截的 filters, 去掉后监控界面 sql 无法统计,'wall'用于防火墙 -->
- </bean>
4. 如果要使用性能监视, 则要在 Web.xml 中通过过滤器进行配置:
- <filter>
- <filter-name>DruidWebStatFilter</filter-name>
- <filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class>
- <init-param>
- <param-name>exclusions</param-name>
- <param-value>*.JS,*.gif,*.jpg,*.PNG,*.CSS,*.ico,/druid/*</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>DruidWebStatFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
5. 然后在 Web.xml 中通过 servlet 进行启动:
- <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>
6. 浏览器访问: http://localhost:8080/mbg/druid/index.html
来源: http://www.bubuko.com/infodetail-3103978.html