Spring Boot使用事务不起作用

今天使用spring boot做关于事务的demo时发现在service层使用@Transactional注解运行之后遇到错误并不能回滚。

@Service
public class HelloController {


    @Autowired
    private StudentRepon studentRepon;

    @Transactional
    public void hello(){

        Student s=new Student();
        s.setName("lllll");
        s.setSex("1");

        studentRepon.save(s);

        Student ss=new Student();
        ss.setName("lllll");
        ss.setSex("11111");

        studentRepon.save(ss);
    }
}


按照思路应该是第一次保存数据库会成功,但是第二次保存数据库时会失败,最后会进行事务回滚将第一次插入的数据也回滚过来,结果发现每次都是能够将第一次的数据插入。

在网上找信息,有的说是在spring boot的启动类上加上@EnableTransactionManagement注解,但是我的最后并不能解决我的问题,最后在一篇文章中发现好像是我的mysql数据库表创建的类型有问题。


mysql的表是有事务安全( 比如:InnoDB)和非事务安全(比如:ISAM、MyISAM)之分的

于是赶紧去查看我的数据库表,结果发现我的数据库表果然不是InnoDB类型的,我的是MyISAM类型的,压根就不支持事务,代码写的没问题也不行呀,所以将数据库表的类型修改为InnoDB类型的,再次尝试就没问题了。

下面是我使用Navicat进行修改表类型的步骤:



针对这种情况,所以说在创建数据库表的时候就应该设置为InnoDB类型,为防止以后开发时需要使用事务。

posted @ 2018-04-18 15:09  代码拯救不了世界  阅读(339)  评论(0编辑  收藏  举报