一、事务失效
1.@Transactional作用在非public上
    @Transactional
    void transferAccounts(){
        adminDao.sub();
        System.out.println(10/0);
        adminDao.add();
    }只执行sub()
2.异常被try catch捕获
    @Transactional
    public void transferAccounts(){
        adminDao.sub();
        try {
            System.out.println(10/0);
        }catch (Exception e){
        }
        adminDao.add();
    }程序以为没有异常,将会都执行
3.出现编译期异常
    @Transactional
    public void transferAccounts() throws UnsupportedEncodingException {
        adminDao.sub();
        "a".getBytes("utf-9");
        adminDao.add();
    }4.事务传播行为设置错误
5.数据库引擎不支持
数据库引擎为InnoDB时,支持事务

 数据库引擎为MyISAM时,不支持事务
6.同一事务,使用非代理对象
二、事务传播行为
事务传播行为:当一个事务方法被另一个事务方法调用时,该事务方法如何执行。
Spring 定义的七种传播行为

1. Propagation.REQUIRED
例如:在A事务中添加B事务
A中没有事务,B方法自己创建事务,B异常不影响A
A中有事务,调用B方法 ,B方法会加入A事务中,任意一方出现异常,都不会执行。
2. Propagation.REQUIRES_NEW
A中没有事务,B方法自己创建事务,B异常不影响A
A中有事务,调用B方法 ,B方法会创建事务,将A事务挂起,A出现异常不影响B
例如:A事务

B事务
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void saveLog(){
        logDao.saveLog();
        //System.out.println(10/0);
    }



















