使用JDBCTemplate设置ComboPooledDataSource

时间:2014-01-25 11:02:50

标签: c3p0

为了访问DB,我使用com.mchange.v2.c3p0.ComboPooledDataSource创建了数据源,其中包含以下属性 `

    <property name="initialPoolSize" value="5" />
    <property name="minPoolSize" value="5" />
    <property name="maxPoolSize" value="10" />
    <property name="idleConnectionTestPeriod" value="200" />
    <property name="acquireIncrement" value="1" />
    <property name="maxStatements" value="25" />
    <property name="numHelperThreads" value="3" />` 

我的dao类扩展了JDBCDaoSupport,上面的数据源被设置到JDBCDaoSupport中,后者提供了用于执行查询的JDBCTemplate。我没有使用任何交易经理。 我现在有两个问题:

  1. 如何管理交易? JDBCTemplate本身是否在插入?
  2. 之前创建了事务
  3. 如果数据库不可用,初始化c3p0池进入无限等待。我想应该有一些属性我可以设置为池初始化的超时。 我试过了 ' <property name="acquireRetryAttempts" value="1" /> 但不确定这是否是正确的做法。

1 个答案:

答案 0 :(得分:0)

我不确定JDBCTemplate是否与ComboPooledDataSource一起工作......我试图用c3p0配置它但是它给了我警告,连接没有返回到池并且为每个请求创建了新的连接。它刚刚充斥我的Mysql服务器(以及我的应用程序获取尝试,太多连接错误)
除了RoseIndia上的一个教程之外,我在网上找不到关于JDBCTemplate配置的任何内容。以下产生了这些错误。

我建议你的数据库事务使用SessionFactory(或者你可能更喜欢核心jdbc PreparedStatement和Resultset)。
就Retry Attempts而言,我认为c3p0在默认配置下不会无限制。您可以使用acquireRetryAttempts和acquireRetryDelay来设置重试尝试时间。
来自交换网站本身:

  

“当c3p0 DataSource尝试并且无法获取Connection时,它将重试到acquireRetryAttempts次,每次尝试之间都会延迟acquireRetryDelay。如果所有尝试都失败,则从DataSource等待Connections的任何客户端都将看到异常,表示无法获取连接。“   

  最好从mchange中查看参考文档,并根据需要配置c3p0   mchange c3p0 reference