2013-04-12 2 views
1

Я использую весной 3 и спящий режим 3.x и мул 3.x в моем файле конфигурации application.My являетсявесной зимуют hibernate.connection.provider_class не получает вызова

<spring:bean id="sessionFactory" 
      class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
      <spring:property name="dataSource" ref="dataSource" /> 
      <spring:property name="packagesToScan" value="${hibernate.packagesToScan}" /> 
      <spring:property name="eventListeners"> 
       <spring:map> 
        <spring:entry key="pre-insert"> 
         <spring:bean 
          class="com.myapp.listener.PreInsertOrUpdateEventListener" 
          id="preInsertOrUpdateEventListener" /> 
        </spring:entry> 
        <spring:entry key="pre-update"> 
         <spring:bean 
          class="com.myapp.listener.PreInsertOrUpdateEventListener" 
          id="preInsertOrUpdateEventListener" /> 
        </spring:entry> 
       </spring:map> 
      </spring:property> 
      <spring:property name="hibernateProperties"> 
       <spring:props> 
        <spring:prop key="hibernate.dialect">${hibernate.dialect}</spring:prop> 
        <spring:prop key="hibernate.show_sql">${hibernate.show_sql}</spring:prop> 
        <spring:prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto} 
        </spring:prop> 
        <spring:prop key="hibernate.temp.use_jdbc_metadata_defaults">${hibernate.temp.use_jdbc_metadata_defaults} 
        </spring:prop> 
        <spring:prop key="hibernate.connection.provider_class">${hibernate.connection.provider_class} 
        </spring:prop> 
        <spring:prop key="hibernate.dbcp.initialSize">${hibernate.dbcp.initialSize} 
        </spring:prop> 
        <spring:prop key="hibernate.dbcp.maxActive">${hibernate.dbcp.maxActive} 
        </spring:prop> 
        <spring:prop key="hibernate.dbcp.maxIdle">${hibernate.dbcp.maxIdle} 
        </spring:prop> 
        <spring:prop key="hibernate.dbcp.minIdle">${hibernate.dbcp.minIdle} 
        </spring:prop> 
       </spring:props> 
      </spring:property> 
     </spring:bean> 

<spring:bean id="dataSource" name="dataSource" 
      class="org.apache.commons.dbcp.BasicDataSource"> 
      <spring:property name="driverClassName" value="${db.driverClassName}" /> 
      <spring:property name="url" value="${db.url}" /> 
      <spring:property name="username" value="${db.username}" /> 
      <spring:property name="password" value="${db.password}" /> 
     </spring:bean> 

Я хочу, чтобы вызвать мои пользовательские класс поставщика соединений для объединения пулов, но он не вызван. может кто-нибудь скажет мне, в чем проблема.

Thank you.

ответ

1

AnnotationSessionFactoryBean и LocalSessionFactoryBean заменяет поставщика услуг с пружиной LocalDataSourceConnectionProvider. Поэтому либо вы должны использовать его, либо создать свой собственный настраиваемый LocalSessionFactoryBean, расширив его.

Проверьте код LocalSessionFactoryBean, чтобы узнать, как его значение connectionProvider.

Надеюсь, это поможет. Я также ищу хорошее решение для этого.

+0

Да, я видел исходный код, и он делает то же самое, и решение, которое я нашел, очень просто. просто удалите запись separete для BasicDataSource и добавьте все ее свойства в реализацию самого hibernte SessionFactory, и вы можете использовать пользовательский поставщик соединения в приложении ur ... – user2181841

+0

@Atanu Pal Ваш анализ верен, AnnotationSessionFactoryBean перезаписывает hibernateProperties, которые предоставляются в конфигурации файл (я проверил источник). Я решил свою проблему, реализовав DelegatingDataSource, который обертывает исходный источник данных для настройки соединений, поэтому в моем случае мне больше не нужен провайдер. –

Смежные вопросы