spring事務控制不起作用(MYSQL)

2021-08-31 10:55:48 字數 1433 閱讀 7457

[color=red]blog遷移至[/color]:[url=

[size=medium] 專案框架就是標準的ssh,測試發現不能實現資料回滾,花了大半天的時間去檢查配置和程式均沒有問題,主要是從以下幾方面去查詢問題:spring 事務配置、巢狀事務、異常是否已經**獲、dao是否強制commit。

實在找不到原因,就在相同框架的前乙個專案中測試,確能正常控制資料回滾,太奇怪了,此時突然想到當前專案的資料庫是mysql,[color=red]mysql的表是有事務安全( 比如:innodb)和非事務安全(比如:isam、myisam)之分的[/color],隨即登入到mysql資料庫檢視:

[/size]

show create table nap_tb_user;

create table `nap_tb_user` (

`id` bigint(20) not null auto_increment,

`email` varchar(50) default null,

`mobile` varchar(20) default null,

`msn` varchar(50) default null,

`index_setting` varchar(50) default null,

`password` varchar(50) default null,

`phone` varchar(20) default null,

`real_name` varchar(50) default null,

`user_name` varchar(50) not null,

primary key (`id`),

unique key `user_name` (`user_name`)

) engine=myisam default charset=utf8

[size=medium]可知當前的表型別是[color=red]myisam[/color],是非事務安全的,所以無法實現資料回滾。

只要修改表的型別即可:[/size]

alter table tablename type=innodb;

[size=medium]如果是用hibernate自動建表,而mysql資料庫預設的建表型別不是innodb,需要修改配置檔案[/size]:

org.hibernate.dialect.mysqlinnodbdialect

-----------------------------------分 ------------------------------------隔 ------------------------------------線 --------------------------------------

spring事務不起作用的原因

1.transactional加在非public方法上,這個其實idea就能規避了,有語法檢查 2.非 transactional註解方法呼叫同類中使用 transactional註解的方法,不生效,原因是事務管理用到了動態 原理自己去查 偽 public void test transaction...

springboot 事務不起作用

當 transactional不起作用如何排查問題。可以按照以下幾個步驟逐一確認 1 首先要看資料庫本身對應的庫 表所設定的引擎是什麼。myisam不支援事務,如果需要,則必須改為innnodb。2 transactional所註解的方法是否為public 3 transactional所註解的方法...

Transactional事務不起作用原因補充

今天,使用 transactional,但是事務卻不起作用,配置確定配置成功,在網上查詢資料,在每個每個原因都試了之後仍然無效,最終發現,原來他們都漏了乙個原因,而我正好是這個原因。因為spring容器和spring mvc是父子容器,spring容器會先載入,如果此時掃瞄了controller,但...