2010-03-26 3 views
4

Je suis en train de mettre à jour une application d'Hibernate 3.2 vers Hibernate 3.3. Je pense que je resterais avec le pool de connexion par défaut (Hibernate a changé sa valeur par défaut de Commons DBCP à c3p0) car je n'ai aucune bonne raison de choisir un pool non-par défaut. Au moins non mais ayant utilisé DBCP auparavant.Comment configurer les propriétés de connexion MySQL avec Spring, Hibernate 3.3 et c3p0?

La mise à niveau s'est déroulée pratiquement sans aucun problème jusqu'à présent. La seule chose que je n'arrive pas à faire est de passer des propriétés à MySQL sous-jacentes JDBC4Connection. Jusqu'à présent, j'ai utilisé les propriétés BasicDataSource.addConnectionProperty(String,String) de DBCP pour passer des propriétés (useUnicode = true, characterEncodin = UTF-8, characterSetResults = UTF-8, zeroDateTimeBehavior = convertToNull).

Cependant, je ne peux trouver aucun moyen de faire la même chose avec c3p0 autre que including them in the JDBC URL. (C'est quelque chose que je voudrais éviter car je veux garder l'URL configurable sans forcer les utilisateurs à inclure ces paramètres.)

Jusqu'ici, j'ai essayé d'utiliser un ConnectionCustomizer sans succès. D'autres suggestions?

Répondre

4

Encore une fois une question que je me répondre (une autre auto-apprenant oui, s'il vous plaît!):

com.mchange.v2.c3p0.ComboPooledDataSource possède une propriété "properties". Fait intéressant, la définition des propriétés après l'utilisateur et le mot de passe les remplace. Mais définir les propriétés avant l'utilisateur et le mot de passe fonctionne comme prévu.

1

Effectuez un suivi pour la réponse automatique. Un exemple d'un moyen de printemps de cette configuration:

Le haricot Source de données:

<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> 

Les propriétés haricot:

<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> 
Questions connexes