注解@Transactional
常用的注解有两个,一个是spring的,一个是java本身的org.springframework.transaction.annotation.Transactional
javax.transaction.Transactional
这两个在使用上基本没什么区别,只是属性名称稍有不同
rollback的默认类为RuntimeException和Error,隔离级别默认为数据源的隔离级别,传播行为默认为REQUIRE
下面以spring的注解使用为例
/**
* @return 无事务
* @throws Exception
*/
@Transactional
public void save1() throws Exception {
User user = new User();
user.setName("user1");
transationalRepository.save(user);
throw new Exception();
}
/**
* @return 有事务
*/
@Transactional(rollbackFor=Exception.class)
public void save2() throws Exception {
User user = new User();
user.setName("user2");
transationalRepository.save(user);
throw new Exception();
}
/**
* @return 有事务
*/
@Transactional
public void save3() throws Exception{
User user = new User();
user.setName("user3");
transationalRepository.save(user);
throw new RuntimeException();
}
/**
* @return 无事务
*/
@Override
public void save4() {
save_4();
}
/**
* @return 有事务
* @throws Exception
*/
@Transactional
public void save5() throws Exception {
User user = new User();
user.setName("user5");
transationalRepository.save(user);
save3();
}
/**
* @return 有事务
* @throws Exception
*/
@Transactional
public void save6() throws Exception {
save_6();
throw new RuntimeException();
}
/**
* @return test
*/
@Transactional
public void save_4() {
User user = new User();
user.setName("user4");
transationalRepository.save(user);
throw new RuntimeException();
}
/**
* @return test
*/
@Transactional
public void save_6(){
User user = new User();
user.setName("user6");
transationalRepository.save(user);
}