C3P0 不会在 Spring 的 Hibernate 属性中启动配置?
我正在使用 Hibernate 3.3.1GA 和 Spring 3.0.2 (以及来自 eclipse 的 Maven)。我将 c3p0-0.9.1 jar 添加到类路径中,并首先尝试了这种方法(在数据源 bean 中配置 c3p0):
<bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${ora.driverClassName}" />
<property name="jdbcUrl" value="${ora.url}" />
<property name="user" value="${ora.username}" />
<property name="password" value="${ora.password}" />
<property name="minPoolSize" value="${minPoolSize}" />
<property name="maxPoolSize" value="${maxPoolSize}" />
<property name="maxIdleTime" value="${maxIdleTime}" />
<property name="maxStatements" value="${maxStatements}" />
<property name="acquireIncrement" value="${acquireIncrement}" />
</bean>
这似乎有效,因为我可以在 eclipse 控制台中看到 c3p0 日志。
但是,当我尝试在 hibernate sessionFactory 属性中配置它时,如下所示:
<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" name="sessionFactory2">
<property name="dataSource" ref="dataSource2" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.query.substitutions">true 1, false 0</prop>
<!-- C3P0 properties (hibernate.c3p0.idle_test_period) -->
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<prop key="hibernate.c3p0.min_size">1</prop>
<prop key="hibernate.c3p0.max_size">20</prop>
<prop key="hibernate.c3p0.timeout">600</prop>
<prop key="hibernate.c3p0.acquire_increment">1</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
</props>
</property>
<property name="mappingResources">
<list>
...
</list>
</property>
</bean>
这不起作用,c3p0 只是无法启动,没有输出,没有错误,什么都没有...
实际上,我并不觉得这很奇怪,因为当我从 Maven 存储库打开 hibernate-core-3.3.1.GA jar 时,我找不到 org.hibernate.connection.C3P0ConnectionProvider 类。我尝试了一些其他版本的 hibernate(3.3.2、3.6.0),但仍然发生同样的事情(jar 文件中没有 C3P0ConnectionProvider 类)。我尝试删除 connection.providerclass 属性,没有区别。
我在这里和其他论坛上阅读了大量相关问题,但我无法真正理解问题所在。 这基本上是我的问题,但我发现它没有用。我是否在属性配置中遗漏了某些内容,我是否将它们命名错误或其他什么?
谢谢。
I'm using Hibernate 3.3.1GA and Spring 3.0.2 (and Maven from eclipse). I added c3p0-0.9.1 jar to classpath, and first tried this approach (configuring c3p0 within datasource bean):
<bean id="dataSource2" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="${ora.driverClassName}" />
<property name="jdbcUrl" value="${ora.url}" />
<property name="user" value="${ora.username}" />
<property name="password" value="${ora.password}" />
<property name="minPoolSize" value="${minPoolSize}" />
<property name="maxPoolSize" value="${maxPoolSize}" />
<property name="maxIdleTime" value="${maxIdleTime}" />
<property name="maxStatements" value="${maxStatements}" />
<property name="acquireIncrement" value="${acquireIncrement}" />
</bean>
This seems to work, as I can see c3p0 log in the eclipse console.
However, when I tried configuring it within hibernate sessionFactory properties, like this:
<bean id="sessionFactory2" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" name="sessionFactory2">
<property name="dataSource" ref="dataSource2" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.query.substitutions">true 1, false 0</prop>
<!-- C3P0 properties (hibernate.c3p0.idle_test_period) -->
<prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<prop key="hibernate.c3p0.min_size">1</prop>
<prop key="hibernate.c3p0.max_size">20</prop>
<prop key="hibernate.c3p0.timeout">600</prop>
<prop key="hibernate.c3p0.acquire_increment">1</prop>
<prop key="hibernate.c3p0.max_statements">50</prop>
</props>
</property>
<property name="mappingResources">
<list>
...
</list>
</property>
</bean>
this doesn't work, c3p0 just won't start, no output, no error, nothing...
Actually, I don't find it so strange , because when I opened hibernate-core-3.3.1.GA jar from Maven repository, I couldn't find org.hibernate.connection.C3P0ConnectionProvider class. I tried some other versions of hibernate (3.3.2, 3.6.0), and still same thing was happening (no C3P0ConnectionProvider class was in jar file). I treid removing connection.providerclass property, no difference.
I read a ton of related questions here and on other forums, and I can't really understand what's the problem. This is basically my problem, but I didn't find it useful. Am I missing something in the properties configuration, did I name them wrong or something?
Thanks.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于您使用的是 Spring 数据源配置(您引用
dataSource2
bean),我认为会话工厂 bean 只是设置数据源,而 Hibernate 忽略它自己的连接配置。如果第一种方法有效,为什么你想要第二种方法?
Since you are using spring data source configuration (you refer
dataSource2
bean), I think, session factory bean just sets data source and Hibernate is ignoring it's own connection configuration.If first approach works, why would you want the second one?
不过为我工作。我用过这样的东西
-拉古.K
Worked for me though. I used something like this
-Raaghu.K