2010-03-26 178 views
4

我目前正在將應用程序從Hibernate 3.2升級到Hibernate 3.3。我雖然堅持使用默認連接池(休眠因子從Commons DBCP改爲c3p0),因爲我沒有任何理由選擇非默認池。至少不是,但之前使用過DBCP。如何使用Spring,Hibernate 3.3和c3p0配置MySQL連接屬性?

到目前爲止升級幾乎沒有任何問題。我唯一不能工作的是將屬性傳遞給底層的MySQL JDBC4Connection。到目前爲止,我使用DBCP的BasicDataSource.addConnectionProperty(String,String)來傳遞屬性(useUnicode = true,characterEncodin = UTF-8,characterSetResults = UTF-8,zeroDateTimeBehavior = convertToNull)。

但是,我找不到任何方法對除including them in the JDBC URL之外的c3p0執行相同操作。 (這是我想避免的,因爲我想保持URL的可配置性而不強制用戶包含這些參數。)

到目前爲止,我試圖使用ConnectionCustomizer而沒有成功。還有其他建議嗎?

回答

1

追問自我答案。 的配置此的彈簧方式的例子:

數據源豆:

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> 
    <property name="properties" ref="mysqlConnectionProperties"></property> 
    <property name="driverClass" value="${jdbc.driver}" /> 
    <property name="jdbcUrl" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}" /> 
    <property name="password" value="${jdbc.password}" /> 
    <!-- c3p0 combo pooled data source settings --> 
    <property name="initialPoolSize" value="3" /> 
    <property name="minPoolSize" value="3" /> 
    <property name="maxPoolSize" value="50" /> 
    <property name="maxIdleTime" value="7200" /> 
    <property name="maxStatements" value="200" /> 
    <property name="idleConnectionTestPeriod" value="270" /> 
    <property name="preferredTestQuery"> 
     <value>SELECT 1</value> 
    </property> 
</bean> 

性質豆:

<bean id="mysqlConnectionProperties" class="java.util.Properties"> 
    <constructor-arg> 
     <props> 
      <prop key="useTimezone">true</prop> 
      <prop key="serverTimezone">America/Chicago</prop> 
       <!-- add any other properties you have --> 
     </props> 
    </constructor-arg> 
</bean> 
相關問題