我将Spring 3.1.2和Hibernate 4.1.7用于我的Web应用程序。我现在要配置这两个。我有我的hibernate.cfg.xml档案:
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.xmlspring配置文件:
webapp-servlet.xml
<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>
DataSource
您不需要两者。您可以摆脱hibernate.cfg.xml并配置中的所有内容LocalSessionFactoryBean,也可以hibernate.cfg.xml按原样重用现有内容(在这种情况下,您无需DataSource在Spring config中进行配置)。
LocalSessionFactoryBean
您有以下选择:
使用嵌入式数据库 -适用于测试和学习目的
使用DriverManagerDataSource-这是一个简单的非池化数据源,可用于测试等(不建议用于生产环境)
DriverManagerDataSource
使用连接池,例如DBCP或c3p0
如果部署到应用程序服务器,则可以使用应用程序服务器通过JNDI提供的连接池
您当前的配置已足够,但缺少Spring事务管理的支持。为了启用它,您需要
宣布 HibernateTransactionManager
HibernateTransactionManager
添加<tx:annotation-driven>以启用声明式事务管理(@Transactional)
<tx:annotation-driven>
@Transactional
声明TransactionTemplate是否要使用程序化事务管理(使用它来克服声明式事务管理的局限性)
TransactionTemplate
另外,不要忘记从Hibernate配置中删除与事务相关的属性,因为它们可能与Spring事务管理冲突