C3P0 不会在 Spring 的 Hibernate 属性中启动配置?

发布于 2024-11-26 19:16:16 字数 2854 浏览 2 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

绻影浮沉 2024-12-03 19:16:16

由于您使用的是 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?

夏花。依旧 2024-12-03 19:16:16

不过为我工作。我用过这样的东西

<property name="hibernateProperties">
  <props>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
  </props>
</property>
<property name="hibernate.dialect">
        org.hibernate.dialect.MySQLDialect
   </property>
    <property name="hibernate.connection.driver_class">
        ${hibernate.connection.driver_class}
   </property>

    <property name="hibernate.connection.url">
        ${hibernate.connection.url}
   </property>
    <property name="hibernate.connection.username">
        ${hibernate.connection.username}
   </property>
    <property name="hibernate.connection.password">
        ${hibernate.connection.password}
   </property>
<property name="hibernate.c3p0.acquire_increment">1</property>
    <property name="hibernate.c3p0.min_size">1</property>
    <property name="hibernate.c3p0.max_size">3</property>
    <property name="hibernate.c3p0.timeout">1000</property>
    <property name="hibernate.c3p0.max_statements">2</property>
    <property name="hibernate.c3p0.numHelperThreads">3</property>
    <property name="hibernate.c3p0.idle_test_period">60</property>
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

-拉古.K

Worked for me though. I used something like this

<property name="hibernateProperties">
  <props>
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
  </props>
</property>
<property name="hibernate.dialect">
        org.hibernate.dialect.MySQLDialect
   </property>
    <property name="hibernate.connection.driver_class">
        ${hibernate.connection.driver_class}
   </property>

    <property name="hibernate.connection.url">
        ${hibernate.connection.url}
   </property>
    <property name="hibernate.connection.username">
        ${hibernate.connection.username}
   </property>
    <property name="hibernate.connection.password">
        ${hibernate.connection.password}
   </property>
<property name="hibernate.c3p0.acquire_increment">1</property>
    <property name="hibernate.c3p0.min_size">1</property>
    <property name="hibernate.c3p0.max_size">3</property>
    <property name="hibernate.c3p0.timeout">1000</property>
    <property name="hibernate.c3p0.max_statements">2</property>
    <property name="hibernate.c3p0.numHelperThreads">3</property>
    <property name="hibernate.c3p0.idle_test_period">60</property>
    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>

-Raaghu.K

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文