spring 配置事务拦截器到 调用2个插入方法的那一层
解决方案 »
- jQuery 导航条
- 急!!没办法了!
- Jsp 循环复选框的问题求助
- JSP代码可以嵌到JAVASCRIPT 中吗?(刚开始学JSP)
- utility.java的问题
- 一个很急的问题,ResultSet和select及input如何协作起来
- JSP中如何在服务器端的到上传图片的width,height; 改大小后再传给客户端看---百万火急!!
- 救命呀,熟悉unicode编码的朋友请进来,使用charset=utf-8为字符集作网页的朋友也请进来。
- 急等tomcat中连接池的问题
- IO流 下载的文件 打开报错 提示:发现无法读取的内容 是否恢复此文档内容
- poi 读取Excel时候 时间过长
- openSwing过时了吗?现在比它更好的是什么?
<!-- spring 管理事务 --> <bean id="myTxManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!-- =======================advice====================================== --> <tx:advice id="txAdvice" transaction-manager="myTxManager"> <!-- 声明事务规则 --> <tx:attributes> <tx:method name="find*" propagation="REQUIRED" read-only="false" /> <tx:method name="test*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="reg*" propagation="REQUIRED" rollback-for="Exception" /> <tx:method name="*" propagation="SUPPORTS" read-only="false" /> </tx:attributes> </tx:advice> <!-- ============================aop===================================== --> <aop:config> <!-- 定义切面 --> <aop:pointcut id="oaServiceMethods" expression="execution(* com.soft.struts2.serviceimpl.*.*(..))" /> <!-- 将事务通知和切面组合 --> <aop:advisor advice-ref="txAdvice" pointcut-ref="oaServiceMethods" /> </aop:config>
在Spring中类似这样的配置
=======================sessionFactory=================================
-->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation" value="classpath:hibernate.cfg.xml">
</property>
</bean>
<!--
========================TransactionManager============================
-->
<!-- spring 管理事务 -->
<bean id="myTxManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<!--
=======================advice======================================
-->
<tx:advice id="txAdvice" transaction-manager="myTxManager">
<!-- 声明事务规则 -->
<tx:attributes>
<tx:method name="find*" propagation="REQUIRED" read-only="false" />
<tx:method name="test*" propagation="REQUIRED"
rollback-for="Exception" />
<tx:method name="save*" propagation="REQUIRED"
rollback-for="Exception" />
<tx:method name="update*" propagation="REQUIRED"
rollback-for="Exception" />
<tx:method name="delete*" propagation="REQUIRED"
rollback-for="Exception" />
<tx:method name="reg*" propagation="REQUIRED" rollback-for="Exception" />
<tx:method name="*" propagation="SUPPORTS" read-only="false" />
</tx:attributes>
</tx:advice>
<!--
============================aop=====================================
-->
<aop:config>
<!-- 定义切面 -->
<aop:pointcut id="oaServiceMethods"
expression="execution(* com.soft.struts2.serviceimpl.*.*(..))" />
<!-- 将事务通知和切面组合 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="oaServiceMethods" />
</aop:config>
在你的业务层加上注解 @Transactional(rollbackFor=Exception.class)就可以了回滚了
请把事务配置在service层,也就是dao的调用者上
其实真正的问题在于spring 和springmvc 分父子容器,ContextLoaderListener才会给@Service加上事务,而springmvc 只是生成普通的bean