繁体   English   中英

为什么在Spring-Hibernate配置中配置dataSource和sessionFactory?

[英]Why configure both dataSource and sessionFactory in Spring-Hibernate Configuration?

我在我的Web应用程序中使用Spring 3.1.2和Hibernate 4.1.7。 我想现在配置这两个。 我有我的hibernate.cfg.xml文件:

<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配置文件中时,为什么需要配置DataSource bean? Hibernate有一些可以使用的默认值吗?
  2. 我可以使用哪些其他DataSource
  3. 我是否缺少任何其他bean或配置参数/属性以使hibernate与我的应用程序一起工作?
  1. 你不需要他们两个。 您可以删除hibernate.cfg.xml并在LocalSessionFactoryBean配置所有LocalSessionFactoryBean ,或者按LocalSessionFactoryBean重用现有的hibernate.cfg.xml (在这种情况下,您不需要在Spring配置中配置DataSource )。

  2. 您有以下选择:

    • 使用嵌入式数据库 - 它有利于测试和学习目的

    • 使用DriverManagerDataSource - 它是一个简单的非池化数据源,可用于测试等(不推荐用于生产用途)

    • 使用连接池,如DBCP或c3p0

    • 如果部署到应用程序服务器,则可以使用应用程序服务器使用JNDI提供的连接池

  3. 您当前的配置已足够,但它缺乏对Spring事务管理的支持。 为了实现它,你需要

    • 声明HibernateTransactionManager

    • 添加<tx:annotation-driven>以启用声明式事务管理( @Transactional

    • 声明TransactionTemplate ,如果你想使用编程式事务管理(用它来克服声明式事务管理的限制)

    • 另外,不要忘记从Hibernate配置中删除与事务相关的属性,因为它们可能与Spring事务管理冲突

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM