2010-09-07 36 views
7

Spring的事務管理器已經有各種日誌記錄活動(啓動,提交&回滾)的帖子。但是,最近我遇到了一個只記錄活動不夠的死鎖問題。如何記錄Spring事務內容

我們的代碼中的根本問題是交易傳播REQUIRED和REQUIRES_NEW的混亂使用。有很多來回的方法調用,最終導致很多事務堆疊在一起。唉,代碼庫非常龐大,解決方案很緊迫......(我們都知道這是什麼)

問題是死鎖,因爲代碼被添加到事務中的查詢實體中,在另一個事務中被次序修改交易。 Spring會吐出一個異常,告訴實體X的更新超時,因爲它被鎖定。現在,知道這很好,但是如何找到錯誤的代碼:早期鎖定的查詢。

我的問題(最後):有沒有辦法記錄添加到事務中的實體?通過這種方式,我可以專門查找鎖定Spring正在抱怨的實體的事務。

謝謝! :-)

回答

0

嘗試在您的ORM中記錄查詢。可能會更容易找到「不良」交易。

1

Spring委託給一個事務管理器,所以Spring不知道在事務中哪些實體被觸動了,事務管理器會這樣做。正如Donz所說,尋找交易經理獲取信息是最好的調查方法。

您也可以查看所有事務定義,並從除以外的所有事務中移除REQUIRES_NEW。只寫/總是寫類型方法(如審計或日誌記錄)。如果您的主要業務邏輯中有REQUIRES_NEW,那麼這是一個錯誤或一些非常奇怪的設計。盲目去除它可能會有比你想象的更少的副作用。