昨晚、今早在調試天盈健系統設備配置功能的時候,發現一個很奇怪的現象,程序里保存的配置日志始終無法保存到數據庫中,但是新錄入用戶或者修改用戶信息是可以的。
? ? ? 開始的時候懷疑是sql語句的問題,但是系統沒報異常,且打印出sql語句后放在mysql客戶端里是可以執行的
? ? 然后懷疑是不是service,dao的問題,按照用戶模塊的功能配置了service,dao,還是無法保存到數據庫
? ? 然后懷疑是不是語句有沒有被數據庫執行,開啟了日志后,發現所有的語句最后都有一個 rollback,事務回滾,沒有提交。
這下找到問題了,是數據源配置的時候默認不自動提交,且dao層事務控制的不正確,導致數據沒有保存到服務器。數據源配置為自動提交后,問題解決。
但是這又衍生出一個新的問題,為什么用戶相關的表在沒有自動提交的時候卻可以正確的插入,修改?
經過對日志的分析,將sql語句放入mysql客戶端執行,發現每個rollback語句執行完后都有一個WARNINGS, show WARNINGS后,發現如下信息:
查看了一下表類型,用戶信息表是MyIsam類型,配置日志表是InnoDB類型,MyIsam類型的表不支持事務,數據插入、修改后無法回滾,而InnoDB類型的表支持事務,才導致這種情況。
看似令人困擾,實則學藝不精。慚愧,還需要努力呀。