浏览 4413 次
锁定老帖子 主题:spring jdbc 事物管理无法回滚
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-07
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/s" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource"> <ref bean="dataSource" /> </property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="userBean" class="com.sunz.spring.ioc.Bean.imp.UserBeanImp"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.RuntimeException" /> <tx:method name="update*" propagation="REQUIRED" /> <tx:method name="delet*" propagation="REQUIRED" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* com.sunz.spring.ioc.Bean.*.*(..))" id="txPoincut" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoincut" /> </aop:config> </beans> ------------------------------------------------ public class UserBeanImp implements UserBean { JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public void add1() { jdbcTemplate.execute("insert into s values(21)"); System.out.println("ioc和aop的测试"); throw new RuntimeException(); } public void add11() { jdbcTemplate.execute("insert into s values(12)"); System.out.println("ioc和aop的测试"); throw new NullPointerException(); } } ------------------------------ public static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); UserBean bean2 = (UserBean) applicationContext.getBean("userBean"); bean2.add11(); System.out.println("-----------------------"); } ----------- 数据库使用的mysql5.0 引擎是InnoDB 测试的时候 事物始终无法回滚 求讨论 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-02-10
<tx:method rollback-for="java.lang.Exception"
|
|
返回顶楼 | |
发表时间:2012-02-10
楼主粗心问题,add11() 方法 抛出throw new NullPointerException();
异常回滚是:rollback-for="java.lang.RuntimeException" |
|
返回顶楼 | |
发表时间:2012-02-10
看看你数据库的存储引擎
|
|
返回顶楼 | |
发表时间:2012-02-10
likedier 写道 楼主粗心问题,add11() 方法 抛出throw new NullPointerException();
异常回滚是:rollback-for="java.lang.RuntimeException" 应该是这个问题吧~ |
|
返回顶楼 | |
发表时间:2012-02-10
mysql 默认引擎不支持事务,引擎为:MyISAM
修改成:InnoDB 看看是不是这个问题! |
|
返回顶楼 | |
发表时间:2012-02-11
xteo24 写道 mysql 默认引擎不支持事务,引擎为:MyISAM
修改成:InnoDB 看看是不是这个问题! 正解,先确定引擎是否支持事务再看你得代码是否有问题 |
|
返回顶楼 | |