在做業務開發時,遇到了乙個事務不起作用的問題。事情是這樣的,方法內部的定時任務呼叫了乙個帶事務的方法,失敗後事務沒有回滾。查閱資料後,問題得到解決,記錄下來分享給大家。
我在這裡模擬乙個場景,大概的呼叫方式就如下面的**這樣。
@override
@transactional
(rollbackfor = runtimeexception.
class
)public
void
insertuser
(user user)
/** * 內部呼叫新增方法
** @param user
*/@override
public
void
invokeinsertuser
(user user)
aop
使用的是動態**的機制,它會給類生成乙個**類,事務的相關操作都在**類上完成。內部方式使用this
呼叫方式時,使用的是例項呼叫,並沒有通過**類呼叫方法,所以會導致事務失效。
在類內部通過@autowired
將本身bean
引入,然後通過呼叫自身bean
,從而實現使用aop
**操作。
注入自身bean
@autowired
@lazy
private userservice service;
修改invokeinsertuser
方法
/**
* 解決方法一 在bean中將自己注入進來
* @param user
*/@override
public
void
invokeinsertuser
(user user)
@autowired
修改invokeinsertuser
方法
/**
* @param user
*/@override
public
void
invokeinsertuser
(user user)
通過aopcontext
獲取當前類的**類,直接通過**類呼叫方法
在引導類上新增@enableaspectjautoproxy(exposeproxy=true)
註解
修改invokeinsertuser
方法
/**
** @param user
*/@override
public
void
invokeinsertuser
(user user)
以上就是內部方法呼叫時,事務不起作用的原因及解決辦法。 spring事務不起作用的原因
1.transactional加在非public方法上,這個其實idea就能規避了,有語法檢查 2.非 transactional註解方法呼叫同類中使用 transactional註解的方法,不生效,原因是事務管理用到了動態 原理自己去查 偽 public void test transaction...
action的setter方法不起作用
在昨乙個後台操作action的時候發現引數傳遞的setter方法沒有起作用 因為打出的值是null 檢查了setter方法是正確的。再setter方法中列印資訊,發現setter方法沒有被呼叫。後來查詢了一些資料 發現時因為 的原因 預設的default棧裡有乙個預設的 params 這個 是用來設...
JQuery繫結事件不起作用的原因及解決方案
原文 原文內容 jquery事件繫結多個選擇器 推薦取代delegate,live document on click footable even,footable odd function 錯誤 頁面出現動態新增元素時,新增元素的事件用普通的方法,無法響應。原因 普通新增的事件,只是在docume...