Зачем настраивать источник данных и sessionFactory в конфигурации Spring-Hibernate?

Я использую Spring 3.1.2 и Hibernate 4.1.7 для моего веб-приложения. Теперь я хочу настроить оба из них. У меня :

<hibernate-configuration>
    <session-factory>
        <property name="connection.url">jdbc:mysql://localhost:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.pool_size">10</property>
        <property name="hibernate.connection.autocommit">false</property>
        <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
        <!-- 
        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
         -->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">update</property>       
    </session-factory>
</hibernate-configuration>

мой webapp-servlet.xml файл конфигурации spring:

<beans>
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="configLocation">
        <value>
            classpath:hibernate.cfg.xml
        </value>
    </property>
    <property name = "dataSource" ref = "dataSource"></property>
</bean>

<bean id = "dataSource" class = "org.apache.commons.dbcp.BasicDataSource">
    <property name = "driverClassName" value = "com.mysql.jdbc.Driver" />
    <property name = "url" value = "jdbc:mysql://localhost:3306/test" />
    <property name = "username" value = "root" />
    <property name = "password" value = "root" />
    <property name = "maxActive" value = "10" />
</bean>
</beans>
  1. почему мне нужно настроить компонент источника данных, когда все необходимые данные уже включены в файл конфигурации hibernate? Hibernate имеет некоторые значения по умолчанию, которые он может использовать?
  2. какие-то другие DataSourceS Я могу использовать?
  3. Я отсутствуют какие-либо другие компоненты или параметры/свойства конфигурации, чтобы заставить hibernate работать с моим приложением?

1 ответов


  1. вам не нужны оба. Вы можете либо избавиться от hibernate.cfg.xml и настроить все в LocalSessionFactoryBean, или повторно использовать существующий hibernate.cfg.xml как (в этом случае вам не нужно настроить DataSource в конфигурации Spring).

  2. у вас есть следующие варианты:

    • использовать встроенная база данных - это хорошо для тестирования и обучения

    • использовать DriverManagerDataSource - это простой non-pooled datasource который можно использовать для испытывать, etc (не порекомендованный для пользы продукции)

    • используйте пул соединений, например DBCP или c3p0

    • при развертывании на сервере приложений можно использовать пул соединений, предоставляемый сервером приложений использование JNDI

  3. ваша текущая конфигурация достаточна, но ей не хватает поддержки Весна управление сделками. Чтобы включить его, вам нужно

    • объявить HibernateTransactionManager

    • добавить <tx:annotation-driven> включить декларативное управление транзакциями (@Transactional)

    • объявить TransactionTemplate если вы хотите использовать программное управление транзакциями (используйте его для преодоления ограничений декларативного управления транзакциями)

    • также не забудьте удалить связанные с транзакциями свойства из конфигурации гибернации, поскольку они могут конфликтовать с управлением транзакциями Spring