错误场景:
spring框架,声明式事务问题描述:
@Transactional注解失效
代码都没有错,但是编译之后就是:张三扣钱了,并且李四没有加钱。
@Service
public class UserService implements IUserService {
@Autowired
IUserDao userDao;
@Transactional
public void trans(){
sub();
int i = 10/0;
save();
}
public void sub() {
System.out.println("张三扣钱");
userDao.sub();
}
public void save() {
System.out.println("李四加钱");
userDao.save();
}
@Override
public User getUser(){
return userDao.getUser();
}
}
@Test
public void test01(){
IUserService service = ioc.getBean(IUserService.class);
service.trans();
}
解决方案:
我用的MySQL数据库,把引擎设为InnoDB就好了!!!
alter table t_user ENGINE = InnoDB;
另外:
还有好多场景会导致@Transactional
这个玩意失效。
而且有很多场景,用了这个玩意的类不能被正常的创建bean。