springboot2.0事务不起作用

配置加了

@EnableTransactionManagement

方法上加了

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)

不起作用。

原因:Springboot2.0后,依然是使用jpa、Hibernate来操作mysql,发现Hibernate默认创建的表是myisam引擎,而不是innodb不起作用,myisam引擎是不支持事务的


查看表引擎 show create table user 

CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4

添加下面的方言即可修改为innodb

spring:  
  jpa:  
    database: mysql  
    show-sql: true  
    hibernate:  
      ddl-auto: update  
      naming:  
        physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy  
    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect  #不加这句则默认为myisam引擎  

 使用mysql命令 ALTER TABLE table_name ENGINE=InnoDB; 可以更改表引擎为innodb

也可以参考这位同学写的

mysql下如何更改database下所有表的数据引擎--MyISAM 到InnoDB

猜你喜欢

转载自blog.csdn.net/u011164906/article/details/80535484