【问题标题】:where should c3p0 properties specified?c3p0 属性应该在哪里指定?
【发布时间】:2012-05-11 14:55:02
【问题描述】:

我正在使用 spring/hibernate 集成应用程序。我已经配置了 c3p0 连接池。我正在使用 c3p0 组合池数据源。我应该在哪里指定组合池数据源属性?

在这个部分?

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="mappingLocations" value="classpath:hibernate-mapping.xml" />
        <property name="hibernateProperties">
            <props>
                **//Here do I need to specify combopooled datasource properties?
        //like acquireIncrement
            acquireRetryAttempts
            acquireRetryDelay
            preferredTestQuery
            maxPoolSize...etc**
            </props>
        </property>
        <property name="dataSource" ref="dataSource" />
    </bean>

还是这里?

<bean id="rootDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${jdbc.driver}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="user" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
**//Here do i need to specify combopooled datasource properties?
            //like acquireIncrement
            acquireRetryAttempts
            acquireRetryDelay
            preferredTestQuery**
            maxPoolSize...etc

</bean>

请给我建议。

谢谢!

【问题讨论】:

    标签: java spring hibernate c3p0


    【解决方案1】:

    您可以在c3p0.properties 文件中指定它们。只需将它放在类路径的根目录中

    或者,在名为 c3p0-config.xml 的 xml 文件中,也位于类路径的根目录中

    或者,如果你想在你的 Spring xml for Hibernate 中使用它,你可以使用

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
          <!--<property name="lobHandler">
             <ref local="lobHandler" />
          </property>-->
          <property name="hibernateProperties">
             <props>
                <prop key="hibernate.connection.driver_class">${jdbc.drivers}</prop>
                <prop key="hibernate.connection.url">${jdbc.url}</prop>
                <prop key="hibernate.connection.username">${jdbc.username}</prop>
                <prop key="hibernate.connection.password">${jdbc.password}</prop>
                <prop key="hibernate.c3p0.min_size">5</prop>
                <prop key="hibernate.c3p0.max_size">100</prop>
                <prop key="hibernate.c3p0.timeout">1800</prop>
                <prop key="hibernate.c3p0.max_statements">50</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>
                <prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
             </props>
          </property>
    

    如果两者都存在,我相信 Hibernate 设置会覆盖 c3po.properties 文件的使用。但是this post 暗示与 c3po 文档有些不一致

    【讨论】:

    • 感谢您的回复。我需要在哪个部分再次访问属性文件中的属性值?谢谢!
    • 如果你创建了属性文件,c3po 类知道会在你的类路径的根目录中用那个确切的文件名查找它,所以你不必指定这个。它应该可以工作。
    【解决方案2】:

    这些应该继续到数据源 bean (rootDataSource)。一旦将数据源传递给 LocalSessionFactoryBean,hibernate 将不会创建连接池 - 因此 hibernateProperties 下指定的属性将被忽略。

    您想要设置的所有属性都可以作为ComboPooledDataSource 上的setter 方法使用。将更多属性标签添加到您的数据源 bean 并为那里指定值。

    <bean id="rootDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driver}" />
            <property name="jdbcUrl" value="${jdbc.url}" />
            <property name="user" value="${jdbc.username}" />
            <property name="password" value="${jdbc.password}" />
            <property name="password" value="${jdbc.password}" />
            <property name="acquireRetryAttempts" value="..." />
            <property name="acquireRetryDelay" value="..." />
            <property name="preferredTestQuery" value="..." />
            <property name="maxPoolSize" value="..." />    
        </bean>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-08
      • 2014-05-04
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-02
      • 2014-05-25
      • 1970-01-01
      相关资源
      最近更新 更多