C3P0 не запустится, настроен в свойствах Hibernate с помощью Spring? - PullRequest
2 голосов
/ 27 июля 2011

Я использую Hibernate 3.3.1GA и Spring 3.0.2 (и Maven из Eclipse). Я добавил j3 c3p0-0.9.1 в classpath и сначала попробовал этот подход (настройка c3p0 в 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>

Кажется, что работает , поскольку я вижу журнал c3p0 в консоли eclipse.
Однако, когда я попытался настроить его в свойствах sessionFactory hibernate, например:

<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 просто не запускается, нет вывода, нет ошибки, ничего ...
На самом деле, я не нахожу это таким странным, потому что когда я открыл jar hibernate-core-3.3.1.GA из репозитория Maven, я не смог найти класс org.hibernate.connection.C3P0ConnectionProvider . Я попробовал некоторые другие версии hibernate (3.3.2, 3.6.0), и все еще происходило то же самое (класс C3P0ConnectionProvider не был в файле jar). Я пытаюсь удалить свойство connection.providerclass , без разницы.

Я прочитал тонну связанных вопросов здесь и на других форумах, и я не могу понять, в чем проблема. Это в основном моя проблема, но я не нашел это полезным. Я что-то упустил в конфигурации свойств, я назвал их неправильно или что-то?

Спасибо.

Ответы [ 2 ]

1 голос
/ 17 октября 2012

работал для меня, хотя. Я использовал что-то вроде этого

<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

1 голос
/ 27 июля 2011

Поскольку вы используете конфигурацию источника данных Spring (вы имеете в виду dataSource2 bean), я думаю, что фабричный сессионный компонент просто устанавливает источник данных, а Hibernate игнорирует свою собственную конфигурацию соединения.

Если первый подход работает, зачем вам второй?

...