spring-mvc.xml中配置声明式事务管理器

<!-- 配置SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<!-- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop> -->
<!-- 服务启动通过实体创建数据库表信息 -->
<prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.autoReconnect">false</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
<prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext
</prop>
<prop key="current_session_context_class">thread</prop>
<!--解决weblogic无法使用hql的问题 =org.hibernate.cache.ehcache.EhCacheRegionFactory -->
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory
</prop>
</props>
</property>
<!--加载hmbl本地目录下的hbm文件 -->
<property name="mappingLocations">
<list>
<value>classpath*:/com/*/*/hbm/*.hbm.xml</value>
<value>classpath*:/com/*/*/*/hbm/*.hbm.xml</value>
<value>classpath*:/com/*/*/*/*/hbm/*.hbm.xml</value>
</list>
</property>
<!-- 自动扫描备注解的实体 -->
<property name="packagesToScan">
<list>
<value>com.*.*.entity</value><!--两级 -->
<value>com.*.*.*.entity</value><!--三级 -->
<value>com.*.*.*.*.entity</value><!--四级 -->
<value>com.wdp.framework.model.common.*</value>
<value>com.*.*.pojo.*</value><!--两级 -->
<value>com.*.*.*.pojo.*</value><!--三级 -->
<value>com.*.*.*.*.pojo.*</value><!--四级 -->
</list>
</property>




<!-- 加载实体文件 -->
<!-- <property name="annotatedClasses"> <list> <value>com.tgb.entity.User</value> 
</list> </property> -->
</bean>

<!-- 配置一个事务管理器 -->

<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


<!--使用注解事物,此处可以多事务管理,使用annotation定义事务 -->
<!-- <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" 
/> -->
<!-- 为了统一事物的规范,此处采用了统一的声明式事物管理 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="batch*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="create*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
<tx:method name="delete*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="update*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<tx:method name="upload*" propagation="REQUIRED"
rollback-for="java.lang.Exception" />
<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到 ,意思是如果是junit的话必须从监听事物 
的位置开始Test,如果不包含事物是无法获取session的 -->
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="count*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="list*" propagation="REQUIRED" read-only="true" />
<tx:method name="serch*" propagation="REQUIRED" read-only="true" />
<tx:method name="*" propagation="REQUIRED" read-only="true"
rollback-for="java.lang.Exception" />
</tx:attributes>
</tx:advice>

猜你喜欢

转载自blog.csdn.net/wangweirong1205/article/details/68483535