论坛首页 Java企业应用论坛

spring jdbc 事物管理无法回滚

浏览 4411 次
精华帖 (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   测试的时候 事物始终无法回滚   求讨论
   发表时间:2012-02-10  
<tx:method  rollback-for="java.lang.Exception"
0 请登录后投票
   发表时间:2012-02-10  
楼主粗心问题,add11() 方法 抛出throw new NullPointerException();
异常回滚是:rollback-for="java.lang.RuntimeException"
0 请登录后投票
   发表时间:2012-02-10  
看看你数据库的存储引擎
0 请登录后投票
   发表时间:2012-02-10  
likedier 写道
楼主粗心问题,add11() 方法 抛出throw new NullPointerException();
异常回滚是:rollback-for="java.lang.RuntimeException"

应该是这个问题吧~
0 请登录后投票
   发表时间:2012-02-10  
mysql 默认引擎不支持事务,引擎为:MyISAM
修改成:InnoDB
看看是不是这个问题!
0 请登录后投票
   发表时间:2012-02-11  
xteo24 写道
mysql 默认引擎不支持事务,引擎为:MyISAM
修改成:InnoDB
看看是不是这个问题!

正解,先确定引擎是否支持事务再看你得代码是否有问题
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics