Spring3 事务不回滚的大问题
?最近在学习Spring,在配置事务管理器的时候发现怎么也不回滚,求解!
?
Beans.xml配置
?
<context:component-scan base-package="com.spring.test" /><tx:annotation-driven transaction-manager="transactionManager"/><bean id="dataSource" value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/test2?useUndicode=true&characterEncoding=utf-8" /><property name="username" value="root" /><property name="password" value="weihua" /><property name="defaultAutoCommit" value="true"></property></bean><bean id="transactionManager"ref="dataSource"></property></bean>
?
访问数据库的代码
@Repository("userDAO")@Transactionalpublic class UserDAOImp implements UserDAO {private JdbcTemplate jdbcTemplate;@Resource(name = "dataSource")public void setDataSource(DataSource dataSource) {jdbcTemplate = new JdbcTemplate(dataSource);}@Override @Transactional(propagation=Propagation.REQUIRED,rollbackFor={Exception.class})public void save(User user) throws Exception{jdbcTemplate.update("insert into _USER(name) values (?)", new Object[] { user.getName() }, new int[] {Types.VARCHAR});throw new Exception("Error");}}?JUint测试代码:
public class TransactionTest {private static UserDAO userDAO;@BeforeClasspublic static void setUpBeforeClass() throws Exception {ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");userDAO=(UserDAO) context.getBean("userDAO");}@Testpublic void testSave() throws Exception {User user=new User("袁伟华");userDAO.save(user);}}?
?
我一开始抛出的是RuntimeException,可是还是能够保存成功!也试了@Transactional(propagation=Propagation.REQUIRED,rollbackFor={Exception.class})不加花括号,结果都是一样的不回滚!不知道问题是出在哪了,在线解释……
1 楼 noukey 2011-09-20 问题已解决,是我把方法拦截后,把Exception Try Catch掉了! 2 楼 volking 2012-01-13 看你的代码 好像没有发现try catch语句 3 楼 xkxkboy 2012-03-09 我也遇到相同的问题了,但是我没有拦截,抛出异常后还是继续插入数据库,为什么呢,能不能把你的方法告诉我?