內部方法呼叫,事務不起作用的原因及解決辦法

2021-09-26 00:09:30 字數 1580 閱讀 3652

在做業務開發時,遇到了乙個事務不起作用的問題。事情是這樣的,方法內部的定時任務呼叫了乙個帶事務的方法,失敗後事務沒有回滾。查閱資料後,問題得到解決,記錄下來分享給大家。

我在這裡模擬乙個場景,大概的呼叫方式就如下面的**這樣。

@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...