druiddatasource jar怎么读

阿里巴巴开源项目 Druid 负责人温少访谈 - 名家访谈 - ITeye精华
相关知识库:
Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以通过定制来实现自己需要的功能。
该项目在阿里巴巴内部得到了广泛的部署,在外部也有大量的用户群。为了使大家更好地了解和使用Druid,我们采访了Druid项目的主要负责人——温少()。
温少是ITeye的名人了,为了照顾新会员,先来个自我介绍吧!
我2001年毕业于深圳大学,毕业后到金蝶软件研发中心工作9年,工作内容包括工作流引擎、多数据库支持引擎、短信网网关等。
2010年3月加入阿里巴巴至今,主要的工作是设计和实现阿里巴巴应用监控系统Dragoon,Druid和Fastjson都是监控系统实现的副产品。
Druid是什么?有什么作用?
Druid首先是一个数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。
Druid的项目背景?目前的项目团队情况?开源目的?
2010年开始,我负责设计一个叫做Dragoon的监控系统,需要一些监控组件,监控应用程序的运行情况,包括Web URI、Spring、JDBC等。为了监控SQL执行情况,我做了一个Filter-Chain模式的ProxyDriver,缺省提供StatFilter。当时我还做了一个SQL Parser。老板说,不如我们来一个更大的计划,把连接池、SQL Parser、Proxy Driver合起来做一个项目,命名为Druid,于是Druid就诞生了。
2011年2月春节期间,我完成了连接池(DruidDataSource)的第一个版本,4月开始在生产环境测试,2012年第一季度开始大规模实施。
提交过代码的开发者有5个人,主要代码是我维护,有一人专门负责内部实施。
通过开源,希望有更多使用场景,更多的反馈,更多人参与其中,共同打造最好的数据库连接池。
Druid支持哪些数据库?
Druid支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
Druid针对Oracle和MySql做了特别优化,比如Oracle的PS Cache内存占用优化,MySql的ping检测优化。
Druid是如何扩展JDBC的?
Druid在DruidDataSourc和ProxyDriver上提供了Filter-Chain模式的扩展API,类似Serlvet的Filter,配置Filter拦截JDBC的方法调用。
为什么说Druid是“最好的数据库连接池”?体现在哪些方面?这是如何实现的?
阿里巴巴是一个重度使用关系数据库的公司,我们在生产环境中大量的使用Druid,通过长期在极高负载的生产环境中实际使用、修改和完善,让Druid逐步发展成最好的数据库连接池。Druid在监控、可扩展性、稳定性和性能方面都有明显的优势。
首先,强大的监控特性,通过Druid提供的监控功能,可以清楚知道连接池和SQL的工作情况。
监控SQL的执行时间、ResultSet持有时间、返回行数、更新行数、错误次数、错误堆栈信息。
SQL执行的耗时区间分布。什么是耗时区间分布呢?比如说,某个SQL执行了1000次,其中0~1毫秒区间50次,1~10毫秒800次,10~100毫秒100次,100~1000毫秒30次,1~10秒15次,10秒以上5次。通过耗时区间分布,能够非常清楚知道SQL的执行耗时情况。
监控连接池的物理连接创建和销毁次数、逻辑连接的申请和关闭次数、非空等待次数、PSCache命中率等。
其次,方便扩展。Druid提供了Filter-Chain模式的扩展API,可以自己编写Filter拦截JDBC中的任何方法,可以在上面做任何事情,比如说性能监控、SQL审计、用户名密码加密、日志等等。
Druid内置提供了用于监控的StatFilter、日志输出的Log系列Filter、防御SQL注入攻击的WallFilter。
阿里巴巴内部实现了用于数据库密码加密的CirceFilter,以及和Web、Spring关联监控的DragoonStatFilter。
第三,Druid集合了开源和商业数据库连接池的优秀特性,并结合阿里巴巴大规模苛刻生产环境的使用经验进行优化。
ExceptionSorter。当一个连接产生不可恢复的异常时,例如Oracle error_code_28 session has been killed,必须立刻从连接池中逐出,否则会产生大量错误。目前只有Druid和JBoss DataSource实现了ExceptionSorter。
PSCache内存占用优化对于支持游标的数据库(Oracle、SQL Server、DB2等,不包括MySql),PSCache可以大幅度提升SQL执行性能。一个PreparedStatement对应服务器一个游标,如果PreparedStatement被缓存起来重复执行,PreparedStatement没有被关闭,服务器端的游标就不会被关闭,性能提高非常显著。在类似“SELECT * FROM T WHERE ID = ?”这样的场景,性能可能是一个数量级的提升。但在Oracle JDBC Driver中,其他的数据库连接池(DBCP、JBossDataSource)会占用内存过多,极端情况可能大于1G。Druid调用OracleDriver提供管理PSCache内部API。
LRU是一个性能关键指标,特别Oracle,每个Connection对应数据库端的一个进程,如果数据库连接池遵从LRU,有助于数据库服务器优化,这是重要的指标。Druid、DBCP、Proxool、JBoss是遵守LRU的。BoneCP、C3P0则不是。BoneCP在mock环境下性能可能还好,但在真实环境中则就不好了。
Druid的性能如何?能否给出一些测试对比数据?
性能不是Druid的设计目标,但是测试数据表明,Druid性能比DBCP、C3P0、Proxool、JBoss都好。
这里有一些测试数据:
谈谈Druid的SQL解析功能?效率如何?
Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。
简单SQL语句用时10微秒以内,复杂SQL用时30微秒。
通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter就是通过Druid的SQL Parser分析语义实现的。
Druid的扩展性如何?
Druid提供Filter-Chain模式的插件框架,通过编写Filter配置到DruidDataSource中就可以拦截JDBC的各种API,从而实现扩展。Druid提供了一系列内置Filter。
在SQL注入防御方面,Druid的优势是什么?实现原理是什么?
Druid的优势是在JDBC最低层进行拦截做判断,不会遗漏。
Druid实现了Oracle、MySql、Postgresql、SQL-92的Parser,基于SQL语法分析实现,理解其中的SQL语义,智能、准确、误报率低。
具体细节参考这里:
目前Druid的应用(部署)情况?
Druid是阿里巴巴监控系统Dragoon的副产品,从Dragoon监控系统的数据来看,在阿里巴巴已经部署了600多个应用。在阿里巴巴外部也有很多Druid的用户,外部用户没有正式统计数据,但经常有反馈。
我想将其中的某个模块(比如监控模块)用到其他连接池,是否可以?模块的独立性如何?
可以通过DruidDriver把内置的Filter用在其他连接池中。在2011年上半年DruidDataSource不成熟的时候,我们也是这么做的。在其他连接池中使用内置的Filter,需要修改jdbc-url,使用DruidDriver作为一个ProxyDriver。
我想在项目中使用,应该注意哪些事项?能否用于商业项目?
Druid是一个开源项目,基于Apache 2.0协议,你可以免费自由使用。Druid只支持JDK 6以上版本,不支持JDK 1.4和JDK 5.0。
配置是否复杂?能否给出一个典型的配置实例?
为了方便大家迁移,Druid的配置和DBCP是基本一致的,如果你原来是使用DBCP,迁移是十分方便的,只需要把mons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。
以下是一个参考配置:
&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="validationQuery" value="SELECT 'x'" /&
&property name="testWhileIdle" value="true" /&
&property name="testOnBorrow" value="false" /&
&property name="testOnReturn" value="false" /&
&property name="poolPreparedStatements" value="true" /&
&property name="maxPoolPreparedStatementPerConnectionSize" value="50" /&
&/bean&
在上面的配置中,通常你需要配置url、username、password、maxActive这几项。
在DruidDataSource中,你可以不配置DriverClass,它根据url自动识别。Druid能够自动识别20多中url,常见的JDBC Driver都包括了。
我目前使用其他连接池(DBCP/C3P0/Proxool等),如何迁移到Druid?
从DBCP迁移最方便,把mons.dbcp.BasicDataSource修改为om.alibaba.druid.pool.DruidDataSource就好了。
Druid网站上提供了,通过这个对照表来迁移你目前的配置。
其他开发者如何反馈问题、提交bug?
Druid源码托管在上,项目地址是。
你可以在github上提交patch和issue(包括bug和新特性)。你也可以加入我们的QQ群,和开发者以及其他用户一起交流。
xuershan 写道跟mybatis整合太悲剧了。新增加mybatis的testcase,spring + mybatis,完全没问题啊:testcase代码:/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java配置代码:/AlibabaTech/druid/blob/master/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml/AlibabaTech/druid/blob/master/src/test/resources/com/alibaba/druid/pool/dataSource.xml
//com.alibaba.druid.pool.DruidPooledStatement
public final ResultSet getResultSet() throws SQLException {
checkOpen();
ResultSet rs = stmt.getResultSet();
// rs为null返回封装对象
DruidPooledResultSet poolableResultSet = new DruidPooledResultSet(this, rs);
resultSetTrace.add(poolableResultSet);
return poolableResultS
} catch (Throwable t) {
throw checkException(t);
// mybatis 调用查询存储过程
rs是null,resultMapCount 为0,但是druid返回了DruidPooledResultSet对象不为null所以报错
protected void validateResultMapsCount(ResultSet rs, int resultMapCount) {
if (rs != null && resultMapCount & 1) {
throw new ExecutorException(
"A query was run and no Result Maps were found for the Mapped Statement '"
+ mappedStatement.getId()
It's likely that neither a Result Type nor a Result Map was specified.");
//mybatis整合 配置了PreparedStatements缓存,会报结果集已关闭错误,跟踪了下代码发现是FilterChainImpl 这个类在调用 rs.next()方法报错。
&property name="poolPreparedStatements" value="true" /&
&property name="maxPoolPreparedStatementPerConnectionSize" value="20" /&
测了与SqlServer2008的连接,貌似把driver名字搞错了. Druid使用了""com.microsoft.jdbc.sqlserver.SQLServerDriver",应该为""com.microsoft.sqlserver.jdbc.SQLServerDriver". 不知是否是JDBC 驱动版本的问题。 你可以手工制定DriverClass属性,覆盖Druid自动检测的配置。
yangxinxyx 写道Druid,万事通而万事不精具体说说看?呵呵,我想你是误会了,我没有贬义的意思一个真正好的框架应该是立足于整个框架所处的领域,能尽可能多的覆盖整个领域的通用需求,同时有着极为优秀的解决方案,这就是万事通。而一个框架不能对业务有所浸入,一旦框架的客户化太细太精,业务浸入过多,那么这个框架也失去了框架本身的意义,这就是所谓,要做到万事不精。
温少,介绍下 dubbo呗. 最近项目用到怕出啥不知道的问题啊!你应该问dubbo相关的开发者
Druid,万事通而万事不精具体说说看?
我天天都能看到温少。。。。真是太崇拜你了。。.....
bukebuhao 写道有没有和bonecp性能比较的数据,目前项目中主要是利用bonecp,参考BoneCP使用LinkedTransferQueue实现,在某些Mock的场景可能会有漂亮的数据,但真实连接数据做测试时,性能并不好。BoneCP的功能也很弱。各种数据库连接池对比/wiki/pages/viewpage.action?pageId=6951797性能测试:/wiki/pages/viewpage.action?pageId=2916539非常感谢,我尝试修改一下。看看性能如何
lovit 写道温少,还没有解决我的问题,呵。。Druid不做自动注册JdbcStatManager为MBean,如果你通过JConsole看,在代码中自己注册MBean,例如: ManagementFactory.getPlatformMBeanServer().registerMBean(JdbcStatManager.getInstance(), new ObjectName("com.alibaba.druid:type=JdbcStatManager")); 有没有在Spring中的配置支持? 开发时,监控SQL执行情况很重要。。是不是最新版本有问题?刚补充了一个例子:测试代码:/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/jmx/JMXExporterTest.java配置文件:/AlibabaTech/druid/blob/master/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml&bean id="statMbeanServer" class="com.alibaba.druid.spring.MBeanServerFactoryBean" /&2.4版本在com.alibaba.druid.support.spring.MBeanServerFactoryBean
温少,还没有解决我的问题,呵。。Druid不做自动注册JdbcStatManager为MBean,如果你通过JConsole看,在代码中自己注册MBean,例如: ManagementFactory.getPlatformMBeanServer().registerMBean(JdbcStatManager.getInstance(), new ObjectName("com.alibaba.druid:type=JdbcStatManager")); 有没有在Spring中的配置支持? 开发时,监控SQL执行情况很重要。。是不是最新版本有问题?刚补充了一个例子:测试代码:/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/jmx/JMXExporterTest.java配置文件:/AlibabaTech/druid/blob/master/src/test/resources/com/alibaba/druid/jmx/spring_stat_export.xml
有没有和bonecp性能比较的数据,目前项目中主要是利用bonecp,参考BoneCP使用LinkedTransferQueue实现,在某些Mock的场景可能会有漂亮的数据,但真实连接数据做测试时,性能并不好。BoneCP的功能也很弱。各种数据库连接池对比/wiki/pages/viewpage.action?pageId=6951797性能测试:/wiki/pages/viewpage.action?pageId=2916539
跟mybatis整合太悲剧了。新增加mybatis的testcase,spring + mybatis,完全没问题啊:testcase代码:/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/SpringMybatisFilterTest.java配置代码:/AlibabaTech/druid/blob/master/src/test/resources/com/alibaba/druid/pool/mybatis/spring-config-mybatis.xml/AlibabaTech/druid/blob/master/src/test/resources/com/alibaba/druid/pool/dataSource.xml
wenshao 写道yunnysunny 写道wenshao 写道yunnysunny 写道只能用spring配置连接参数吗?支持JNDI配置:/wiki/pages/viewpage.action?pageId=2916633直接调用:/AlibabaTech/druid/blob/master/src/test/java/com/alibaba/druid/bvt/pool/TestH2.java能否支持像dbcp那样,传递一个Property对象来初始化datasource。类似这种形式:BasicDataSource dataSource = (BasicDataSource) BasicDataSourceFactory.createDataSource(Property p);这样我配置一个properties文件后,初始化的时候读取配置文件数据到p变量后,就可以用了。有的:com.alibaba.druid.pool.DruidDataSourceFactory.createDataSource(Map)晕,用的数据结构竟然是Map,看来还得用Property转化一遍。你能不能傻在家里,别出来丢人现眼。
wenshao 写道magic4u 写道最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。阿里巴巴的大规模布署之后还不够么?& 你能够找到比Druid更好的数据库连接池么?hehe,作为开源产品来说,Druid缺乏案例证明,我不认为在阿里的环境中大规模部署了就是最好的东西,只能说是最合适阿里的东西。另外,作为连接池framework来说,Druid做过市面上大部分数据库产品的兼容性测试么?druid和常见的框架,比如spring、ibatis、hibernate、nutz、mybatis、play!、JNDI等,都有结合部署在生产环境的例子。兼容性应该不存在问题。Druid还是一个活跃和发展的项目,遇到问题你可以反馈然后修正。其他的数据库连接池,如DBCP、C3P0、Proxool都处于僵死的状态,遇到问题你哭去吧。经常遇到人抱怨DBCP、C3P0、Proxool的问题,又无法解决。比如说DBCP的连接风暴,Proxool死锁等等。
magic4u 写道最好的...我觉得这个还是加一个之一吧。目前没有看到有除阿里之外的大规模部署范例。阿里巴巴的大规模布署之后还不够么?& 你能够找到比Druid更好的数据库连接池么?hehe,作为开源产品来说,Druid缺乏案例证明,我不认为在阿里的环境中大规模部署了就是最好的东西,只能说是最合适阿里的东西。另外,作为连接池framework来说,Druid做过市面上大部分数据库产品的兼容性测试么?
没找到jar,要自己编译? 有:http://central.maven.org/maven2/com/alibaba/druid/0.2.4/有关druid连接池找不到dataSource的问题 - 开源中国社区
当前访客身份:游客 [
当前位置:
Cannot find class [com.alibaba.druid.pool.DruidDataSource] for bean with name 'dataSource' defined in class path resource [config/spring.xml]; nested exception is java.lang.ClassNotFoundException: com.alibaba.druid.pool.DruidDataSource
ERROR [localhost-startStop-1] - Context initialization failed
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.alibaba.druid.pool.DruidDataSource] for bean with name 'dataSource' defined in class path resource [config/spring.xml]; nested exception is java.lang.ClassNotFoundException: com.alibaba.druid.pool.DruidDataSource
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1357)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.determineTargetType(AbstractAutowireCapableBeanFactory.java:628)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:597)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1450)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:980)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5099)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5615)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1260)
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:2002)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.ClassNotFoundException: com.alibaba.druid.pool.DruidDataSource
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1891)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1734)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:250)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:394)
at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1402)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1349)
... 24 more
感觉自己已经引包了,为什么还是说找不到呢
共有3个回答
<span class="a_vote_num" id="a_vote_num_
查classpath吧。
<span class="a_vote_num" id="a_vote_num_
用低版本。1.0.6。新版本程序有问题。
<span class="a_vote_num" id="a_vote_num_
JAR包没有在容器中出现。
更多开发者职位上
有什么技术问题吗?
化相真如的其它问题
类似的话题类 DruidDataSource
java.lang.Object
com.alibaba.druid.pool.DruidDataSource
所有已实现的接口:
, , , , java.io.Closeable, java.io.Serializable, java.lang.AutoCloseable, java.lang.Cloneable, java.sql.Wrapper, javax.naming.Referenceable, monDataSource, javax.sql.ConnectionPoolDataSource, javax.sql.DataSource
直接已知子类:
public class DruidDataSource
implements , , javax.naming.Referenceable, java.io.Closeable, java.lang.Cloneable, javax.sql.ConnectionPoolDataSource
嵌套类概要
限定符和类型
限定符和类型
字段和说明
protected java.lang.String
Instance key
从类继承的字段&com.alibaba.druid.pool.
, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
构造器概要
构造器和说明
(boolean&fairLock)&
限定符和类型
方法和说明
java.lang.Object
close datasource
protected void
(java.sql.Connection&realConnection)
抛弃连接,不进行回收,而是抛弃
java.lang.String
java.util.DateDruidDataSource数据库连接池
DruidDataSource是一个数据库连接池的实现,它的设计目标是提供一个当前最好的数据库连接池,在性能、扩展性等方面取得最合适的平衡,取代DBCP、C3P0等连接池。 高性能
测试数据表明,Druid比DBCP、C3P0、BoneCP的性能都好很多。具体请看 可管理性
DruidDataSource本身提供了很多监控属性,具体看。DruidDataSource支持StatFilter,具体配置看
提供基于Filter-Chain模式的扩展机制。具体自定义扩展的例子看。 升级
替换DBCP,配置和DBCP兼容,可以方便替换DBCP。
适合大规模应用
结合Alibaba使用数据库连接池的经验,避免一些已知问题,例如数据库不可用恢复之后产生的连接风暴问题等。 设计 ConnectionPool |---------------------------| | | getConnection | | (notEmpty.await) | | (lowWater.signal) | | (maxActive.await) | | &-------------------------- | | &-------------------------- | | &-------------------------- | | | | | | --------------------------& | | --------------------------& | | 销毁多余连接的线程 --------------------------& | | (highWater.awati, idleTimeout.await) close | | --------------------------------------& (highWater.signal) | | (maxActive.signal) | | | | | | 产生连接的线程 | | (lowWater.await) | | (notEmpty.signal) | | --------------------------& | | | | |---------------------------| 五个Condition:notEmpty、maxActive、lowWater、hightWater, idleTime
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=&3000& /&
&&&&&property name=&minEvictableIdleTimeMillis& value=&300000& /&
&&&&&property name=&validationQuery& value=&SELECT 'x'& /&
&&&&&property name=&testWhileIdle& value=&true& /&
&&&&&property name=&testOnBorrow& value=&false& /&
&&&&&property name=&testOnReturn& value=&false& /&
&&&&&property name=&poolPreparedStatements& value=&true& /&
&&&&&property name=&maxPoolPreparedStatementPerConnectionSize& value=&20& /&
很喜欢此文字

我要回帖

更多关于 druiddatasource配置 的文章

 

随机推荐