2 nancyjustin nancyjustin 于 2016.09.22 22:39 提问

关于在spring对事务的异常处理

我在对spring事务做练习的时候,spring在事务执行过程中,如果发生异常,
已经成功执行的数据要进行回滚,有一个问题就是我在applicationContext.xm
l中已经配置了相关代码,但是结果在测试的时候,发现结果还是没有回滚,插入
了数据表中。。求解答

```




<!-- 初始化连接池大小 -->





<!-- 配置JdbcTempalte -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
    <constructor-arg index="0" ref="dataSource"></constructor-arg>
</bean>

<!-- 配置UserDao -->
<bean id="userDao" class="cn.yangxu.xml_anno.UserDao">
    <property name="temlate" ref="jdbcTemplate"></property>
</bean>
<bean id="userService" class="cn.yangxu.xml_anno.UserService">
    <property name="userDao" ref="userDao"></property>
</bean>
<!-- #############5. Spring声明式事务管理配置############### -->
<!-- 5.1 配置事务管理器类 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>


<!-- 5.2 配置事务增强(如果管理事务?) -->
<tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
        <tx:method name="get*" read-only="true"/>
        <tx:method name="find*" read-only="true"/>
        <tx:method name="*" read-only="false"/>
    </tx:attributes>
</tx:advice>

<!-- 5.3 Aop配置: 拦截哪些方法(切入点表表达式) + 应用上面的事务增强配置 -->
<aop:config>
    <aop:pointcut expression="execution(* cn.yangxu.xml_anno.UserDao.*())" id="pt"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
</aop:config>
下面是拦截的类-->UserDao.save(User user)


public void save(User user) {
String sql = "insert into tuser (name) values(?)";
System.out.println("UserDao.save()");
Object [] args = {user.getName()};
template.update(sql, args);
int i = 1/0;//发生异常,执行成功需要回滚
}





2个回答

nancyjustin
nancyjustin   2016.09.22 22:59

不知道怎么就有突然好了,我在这里也并没有捕获处理这个异常。
这是一个朋友碰到这个问题时候他的建议。
http://blog.csdn.net/yipanbo/article/details/46048413

nancyjustin
nancyjustin   2016.09.22 23:12

spring默认处理的异常为RuntimeException处理(异常必须是未捕获处理的异常),发现异常后又aop进行处理。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!