`
noukey
  • 浏览: 2037 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring3 事务不回滚的大问题

阅读更多

 最近在学习Spring,在配置事务管理器的时候发现怎么也不回滚,求解!

 

Beans.xml配置

 

 <context:component-scan base-package="com.spring.test" />
	<tx:annotation-driven transaction-manager="transactionManager"/>
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url"
			value="jdbc:mysql://localhost:3306/test2?useUndicode=true&amp;characterEncoding=utf-8" />
		<property name="username" value="root" />
		<property name="password" value="weihua" />
		<property name="defaultAutoCommit" value="true"></property>
	</bean>
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource"></property>
	</bean>

 

访问数据库的代码

@Repository("userDAO")
@Transactional
public 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;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
		userDAO=(UserDAO) context.getBean("userDAO");
	}

	@Test
	public void testSave() throws Exception {
		User user=new User("袁伟华");
			userDAO.save(user);
		
	}

}

 

 

我一开始抛出的是RuntimeException,可是还是能够保存成功!也试了@Transactional(propagation=Propagation.REQUIRED,rollbackFor={Exception.class})不加花括号,结果都是一样的不回滚!不知道问题是出在哪了,在线解释……

1
1
分享到:
评论
3 楼 xkxkboy 2012-03-09  
我也遇到相同的问题了,但是我没有拦截,抛出异常后还是继续插入数据库,为什么呢,能不能把你的方法告诉我?
2 楼 volking 2012-01-13  
看你的代码 好像没有发现try catch语句
1 楼 noukey 2011-09-20  
问题已解决,是我把方法拦截后,把Exception Try Catch掉了!

相关推荐

Global site tag (gtag.js) - Google Analytics