Как настроить свойства подключения MySQL с помощью Spring, Hibernate 3.3 и c3p0? - PullRequest
4 голосов
/ 26 марта 2010

В настоящее время я занимаюсь обновлением приложения с Hibernate 3.2 до Hibernate 3.3. Хотя я и придерживался пула соединений по умолчанию (Hibernate изменил значение по умолчанию с Commons DBCP на c3p0 ), поскольку у меня нет веских причин выбирать пул не по умолчанию , По крайней мере, но не использовал DBCP раньше.

До сих пор обновление прошло практически без проблем. Единственная вещь, которую я не могу заставить работать - это передача свойств базовому MySQL JDBC4Connection . До сих пор я использовал DBCP BasicDataSource.addConnectionProperty (String, String) для передачи свойств (useUnicode = true, characterEncodin = UTF-8, characterSetResults = UTF-8, zeroDateTimeBehavior = convertToNull).

Однако я не могу найти способ сделать то же самое с c3p0, кроме , включая их в URL JDBC . (Этого я бы хотел избежать, поскольку я хочу, чтобы URL-адрес можно было настраивать, не заставляя пользователей включать эти параметры.)

До сих пор я безуспешно пытался использовать ConnectionCustomizer . Любые другие предложения?

Ответы [ 2 ]

4 голосов
/ 26 марта 2010

Еще раз на вопрос, на который я отвечаю сам (другой самообучающийся? Да, пожалуйста!):

com.mchange.v2.c3p0.ComboPooledDataSource имеет свойство " properties ". Интересно, что установка свойств после имени пользователя и пароля переопределяет их. Но установка свойств перед пользователем и паролем работает как положено.

1 голос
/ 29 марта 2012

Следите за ответом. Пример весеннего способа настройки этого:

Компонент источника данных:

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

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