什麼是事務?可以參考我的這篇部落格!
spring boot 怎麼使用spring的事務控制機制?可以參考我的這篇部落格!
通常的情況下,一般的事務直接在service類上新增@transactional註解,spring就會幫我們替所有方法自動生成事務。但是在某些情況下,很少出現的。我們希望在乙個方法上,出現兩個事務,而且2給事務之間互不影響。
如:乙個使用者的修改操作以及系統的刪除操作
@service
public class testservice
@transactional(propagation = propagation.requires_new)
public void systemdelete(
)}
propagation.requires_new:表示如果當前存在事務,則掛起當前事務並且開啟乙個新事物繼續執行,新事物執行完畢之後,然後在緩刑之前掛起的事務,如果當前不存在事務的話,則開啟乙個新事物。
上面的例子,在使用systemdelete()的時候,我顯性的丟擲乙個執行期異常。按照最初的想法,systemdelete()會進行rollback,而使用者修改操作不會。但是觀察資料庫會發現,這2個spring事務都進行了回滾。
那麼如果我們抓住systemdelete()丟擲的異常
@service
public class testservice catch (exception e)
} @transactional(propagation = propagation.requires_new)
public void systemdelete(
)}
這次會發現2個操作都成功了。說明這2個操作其實都在同乙個事務之中。
有2種方法可以解決這種場景
@service
public class servicea
}@service
public class serviceb
}
spring 也考慮過這個問題提供了解決方案
spring配置使用
spring xml配置
"true"/>
"true"
>
<
!-- spring xml配置上面2個節點的乙個就可以了,效果是一樣的。這個配置是讓spring暴露出**物件 -->
2.在**的呼叫中要求使用**物件去呼叫即可
((testservice) aopcontext.currentproxy(
)).systemdelete(
);
spring boot 配置使用
當然現在主流的 spring boot 也是支援使用的 aop **的
1.引入spring aop依賴
org.springframework.boot
spring-boot-starter-aop
2.新增註解暴露**物件
@enableaspectjautoproxy(exposeproxy = true)
public static void main(string[
] args)
}3.在**的呼叫中要求使用**物件去呼叫即可
((testservice) aopcontext.currentproxy(
)).systemdelete(
);
Spring在乙個事物中開啟另乙個事物並提交
自己平時的一點筆記 在對資料庫資料進行修改操作時,當 現異常時,那麼事物就會進行回滾操作,資料庫內的資料將不會被修改 但總是會有一些需要就是即使 中途報錯了,也要將資料庫中的資料進行修改,這時,就需要重新開啟乙個事物去提交 方法一 運用註解 transactional propagation pro...
如何開啟乙個事務
mysql的事務處理主要有兩種方法。1 用begin,rollback,commit來實現 begin 開始乙個事務 rollback 事務回滾 commit 事務確認 2 直接用set來改變mysql的自動提交模式 mysql預設是自動提交的,也就是你提交乙個query,它就直接執行!我們可以通過...
在service中開啟乙個dialog
純粹是個人學習總結,如有不對的地方請吐槽。在dialog show方法之前新增如下 表示該dialog是乙個系統的dialog dialog.getwindow settype windowmanager.layoutparams.type system alert 測試 builder build...