昨晚、今早在調(diào)試天盈健系統(tǒng)設(shè)備配置功能的時候,發(fā)現(xiàn)一個很奇怪的現(xiàn)象,程序里保存的配置日志始終無法保存到數(shù)據(jù)庫中,但是新錄入用戶或者修改用戶信息是可以的。
? ? ? 開始的時候懷疑是sql語句的問題,但是系統(tǒng)沒報異常,且打印出sql語句后放在mysql客戶端里是可以執(zhí)行的
? ? 然后懷疑是不是service,dao的問題,按照用戶模塊的功能配置了service,dao,還是無法保存到數(shù)據(jù)庫
? ? 然后懷疑是不是語句有沒有被數(shù)據(jù)庫執(zhí)行,開啟了日志后,發(fā)現(xiàn)所有的語句最后都有一個 rollback,事務(wù)回滾,沒有提交。

這下找到問題了,是數(shù)據(jù)源配置的時候默認(rèn)不自動提交,且dao層事務(wù)控制的不正確,導(dǎo)致數(shù)據(jù)沒有保存到服務(wù)器。數(shù)據(jù)源配置為自動提交后,問題解決。
但是這又衍生出一個新的問題,為什么用戶相關(guān)的表在沒有自動提交的時候卻可以正確的插入,修改?
經(jīng)過對日志的分析,將sql語句放入mysql客戶端執(zhí)行,發(fā)現(xiàn)每個rollback語句執(zhí)行完后都有一個WARNINGS, show WARNINGS后,發(fā)現(xiàn)如下信息:

查看了一下表類型,用戶信息表是MyIsam類型,配置日志表是InnoDB類型,MyIsam類型的表不支持事務(wù),數(shù)據(jù)插入、修改后無法回滾,而InnoDB類型的表支持事務(wù),才導(dǎo)致這種情況。
看似令人困擾,實(shí)則學(xué)藝不精。慚愧,還需要努力呀。