2012-05-11 41 views
0

我正在使用spring/hibernate集成应用程序。我配置了c3p0连接池。我正在使用c3p0 combopooled数据源。我应该在哪里指定combopooled数据源属性?哪里应该指定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> 

请给我建议。

谢谢!

回答

1

您可以在c3p0.properties文件中指定它们。只要把它放在你的classpath

的根源,或者在名为c3p0-config.xml xml文件也在你的classpath

的根,或者,如果你想在你的Spring XML对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文档有些不一致

+0

感谢您的回复。再次在哪个部分我需要从属性文件访问属性值?谢谢! – user1016403

+0

如果你创建属性文件,c3po类知道在你的类路径的根目录下找到它,并且使用该文件名,所以你不必指定它。它应该只是工作。 – Brad

0

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

想要设置的所有属性在ComboPooledDataSource上可用作设置方法。将更多属性标签添加到数据源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>