【问题标题】:How to configure MySQL connection properties with Spring, Hibernate 3.3 and c3p0?如何使用 Spring、Hibernate 3.3 和 c3p0 配置 MySQL 连接属性?
【发布时间】:2011-02-01 04:05:51
【问题描述】:

我目前正在将应用程序从 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)。

但是,除了including them in the JDBC URL 之外,我找不到任何方法可以对 c3p0 执行相同操作。 (这是我想避免的事情,因为我想保持 URL 可配置而不强制用户包含这些参数。)

到目前为止,我尝试使用 ConnectionCustomizer 没有成功。还有其他建议吗?

【问题讨论】:

    标签: java mysql hibernate c3p0 apache-commons-dbcp


    【解决方案1】:

    我再一次回答自己的问题(另一个自学者?是的,拜托!):

    com.mchange.v2.c3p0.ComboPooledDataSource 有一个属性“properties”。有趣的是,在用户和密码之后设置属性会覆盖它们。但是在用户和密码之前设置属性可以按预期工作。

    【讨论】:

      【解决方案2】:

      跟进自己的答案。 配置此的弹簧方式的示例:

      数据源 bean:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2019-02-22
        • 2011-10-14
        • 2013-01-05
        • 1970-01-01
        • 2016-06-26
        相关资源
        最近更新 更多