国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

Spring Boot事務配置操作

瀏覽:6日期:2023-08-13 17:47:33

1、在啟動主類添加注解:@EnableTransactionManagement 來啟用注解式事務管理,相當于之前在xml中配置的<tx:annotation-driven />注解驅(qū)動。

2、在需要事務的類或者方法上面添加@Transactional() 注解,里面可以配置需要的粒度:

Spring Boot事務配置操作

這么多東西提供配置:

Isolation :隔離級別

隔離級別是指若干個并發(fā)的事務之間的隔離程度,與我們開發(fā)時候主要相關(guān)的場景包括:臟讀取、重復讀、幻讀。

我們可以看 org.springframework.transaction.annotation.Isolation 枚舉類中定義了五個表示隔離級別的值:

public enum Isolation { DEFAULT(-1), READ_UNCOMMITTED(1), READ_COMMITTED(2), REPEATABLE_READ(4), SERIALIZABLE(8);}

DEFAULT :這是默認值,表示使用底層數(shù)據(jù)庫的默認隔離級別。對大部分數(shù)據(jù)庫而言,通常這值就是: READ_COMMITTED 。

READ_UNCOMMITTED :該隔離級別表示一個事務可以讀取另一個事務修改但還沒有提交的數(shù)據(jù)。該級別不能防止臟讀和不可重復讀,因此很少使用該隔離級別。

READ_COMMITTED :該隔離級別表示一個事務只能讀取另一個事務已經(jīng)提交的數(shù)據(jù)。該級別可以防止臟讀,這也是大多數(shù)情況下的推薦值。

REPEATABLE_READ :該隔離級別表示一個事務在整個過程中可以多次重復執(zhí)行某個查詢,并且每次返回的記錄都相同。即使在多次查詢之間有新增的數(shù)據(jù)滿足該查詢,這些新增的記錄也會被忽略。該級別可以防止臟讀和不可重復讀。

SERIALIZABLE :所有的事務依次逐個執(zhí)行,這樣事務之間就完全不可能產(chǎn)生干擾,也就是說,該級別可以防止臟讀、不可重復讀以及幻讀。但是這將嚴重影響程序的性能。通常情況下也不會用到該級別。

指定方法:通過使用 isolation 屬性設(shè)置,例如:@Transactional(isolation = Isolation.DEFAULT)

Propagation:傳播行為

所謂事務的傳播行為是指,如果在開始當前事務之前,一個事務上下文已經(jīng)存在,此時有若干選項可以指定一個事務性方法的執(zhí)行行為。

我們可以看 org.springframework.transaction.annotation.Propagation 枚舉類中定義了6個表示傳播行為的枚舉值:

public enum Propagation { REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW(3), NOT_SUPPORTED(4), NEVER(5), NESTED(6);}

REQUIRED :如果當前存在事務,則加入該事務;如果當前沒有事務,則創(chuàng)建一個新的事務。

SUPPORTS :如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續(xù)運行。

MANDATORY :如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。

REQUIRES_NEW :創(chuàng)建一個新的事務,如果當前存在事務,則把當前事務掛起。

NOT_SUPPORTED :以非事務方式運行,如果當前存在事務,則把當前事務掛起。

NEVER :以非事務方式運行,如果當前存在事務,則拋出異常。

NESTED :如果當前存在事務,則創(chuàng)建一個事務作為當前事務的嵌套事務來運行;如果當前沒有事務,則該取值等價于 REQUIRED 。

指定方法:通過使用 propagation 屬性設(shè)置,例如:@Transactional(propagation = Propagation.REQUIRED)

補充知識:SpringBoot配置全局事務(復制就能用)

廢話不多說,看代碼吧~

@Aspect@Configurationpublic class TransactionAdviceConfig { private static final String AOP_POINTCUT_EXPRESSION = 'execution (* com.***.service.*.*(..))'; @Autowired private PlatformTransactionManager transactionManager; @Bean public TransactionInterceptor txAdvice() { DefaultTransactionAttribute txAttr_REQUIRED = new DefaultTransactionAttribute(); txAttr_REQUIRED.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); DefaultTransactionAttribute txAttr_REQUIRED_READONLY = new DefaultTransactionAttribute(); txAttr_REQUIRED_READONLY.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); txAttr_REQUIRED_READONLY.setReadOnly(true); NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource(); source.addTransactionalMethod('add*', txAttr_REQUIRED); source.addTransactionalMethod('save*', txAttr_REQUIRED); source.addTransactionalMethod('delete*', txAttr_REQUIRED); source.addTransactionalMethod('update*', txAttr_REQUIRED); source.addTransactionalMethod('exec*', txAttr_REQUIRED); source.addTransactionalMethod('set*', txAttr_REQUIRED); source.addTransactionalMethod('get*', txAttr_REQUIRED_READONLY); source.addTransactionalMethod('query*', txAttr_REQUIRED_READONLY); source.addTransactionalMethod('find*', txAttr_REQUIRED_READONLY); source.addTransactionalMethod('list*', txAttr_REQUIRED_READONLY); source.addTransactionalMethod('count*', txAttr_REQUIRED_READONLY); source.addTransactionalMethod('is*', txAttr_REQUIRED_READONLY); return new TransactionInterceptor(transactionManager, source); } @Bean public Advisor txAdviceAdvisor() { AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); pointcut.setExpression(AOP_POINTCUT_EXPRESSION); return new DefaultPointcutAdvisor(pointcut, txAdvice()); }}

以上這篇Spring Boot事務配置操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 榆社县| 嘉义县| 鹤岗市| 平定县| 远安县| 华亭县| 怀安县| 辽宁省| 南乐县| 建平县| 克什克腾旗| 临海市| 中卫市| 怀远县| 霞浦县| 通渭县| 蒙阴县| 连南| 聊城市| 株洲市| 梁平县| 牙克石市| 平果县| 翁源县| 通州区| 星子县| 怀仁县| 诸暨市| 岫岩| 竹溪县| 南康市| 通道| 安福县| 牟定县| 方山县| 惠水县| 松阳县| 义马市| 玛沁县| 霍邱县| 雷山县|