javascript
在Spring中了解事务注释
1.簡介
Spring為程序性和聲明性事務提供支持。
1.1程序化交易
對于程序性事務,需要顯式編寫事務管理代碼,以便在一切成功后提交,并在出現問題時回滾。 在這種情況下,事務管理代碼與業務邏輯緊密綁定。
1.2聲明式交易
聲明式事務將事務管理代碼與業務邏輯分開。 Spring通過Spring上下文中的XML配置或@Transactional注釋,使用事務建議(使用AOP)來支持聲明式事務。
在本教程中,我們將特別關注@Transactional批注及其工作方式。
2.實施
要在基于Spring的應用程序中開始使用@Transactional批注,我們需要先在Spring應用程序中啟用批注,方法是將所需的配置添加到spring上下文文件中–
<tx:annotation-driven transaction-manager="txManager"/>接下來是定義事務管理器Bean,其名稱與上述transaction-manager屬性值中指定的名稱相同。
交易經理可能是–
2.1數據源交易管理器
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref= "datasource" /> </bean>2.2休眠事務管理器
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"><property name="sessionFactory" ref= "sessionFactory" /> </bean>2.3 JPA交易管理器
<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /> </bean>現在,我們準備在類或方法級別使用@Transactional批注。
@Transactional(value = "myTransactionManager", propagation = Propagation.REQUIRED, readOnly = true) public void myMethod() {... }3.相關鏈接
- 將Hibernate與Spring MVC和Maven集成
- Hibernate Framework簡介
4.了解@Transactional批注
在較高的層次上,當一個類在其本身或其成員上聲明@Transactional時,Spring將創建一個代理,該代理實現與您要注釋的類相同的接口。 換句話說,Spring將Bean包裝在代理中,而Bean本身對此一無所知。 代理為Spring提供了一種在方法調用之前,之后或周圍將行為注入到被代理對象中的方式。
在內部,它與使用事務通知(使用AOP)相同,在代理中首先創建代理,然后在目標bean的方法之前/之后調用代理。
生成的代理對象提供了由Spring創建的TransactionInterceptor 。 因此,當從客戶端代碼調用@Transactional方法時,首先從代理對象調用TransactionInterceptor ,該代理對象開始事務并最終在目標bean上調用該方法。 調用完成后, TransactionInterceptor相應地提交/回滾事務。
注意,只有來自目標bean“外部”的調用才通過代理。
5.了解傳播和只讀注釋屬性
5.1交易只讀
如果未將readOnly屬性顯式設置為true ,則將具有讀/寫事務。
顯式地指定readOnly屬性總是更好的選擇,因為我們已經注意到,Hibernate大大改善了性能。
5.2交易傳播
默認情況下,事務傳播是必需的,這意味著同一事務將從事務調用方傳播到事務被調用方。 它將創建一個新事務,或在可用的情況下重用該事務。 例如,如果只讀事務調用讀寫事務方法,則整個事務將為只讀。
根據事務傳播屬性(例如REQUIRES_NEW ),有時會在某個時候掛起/暫停現有事務,總是啟動并最終提交新事務,然后恢復第一個事務。
5.3隔離度
隔離級別定義了事務之間的合同。
- 讀取未提交 –線程尚未提交事務且另一個線程正在讀取臟數據時,允許進行臟讀。
- 已提交讀 –不允許臟讀。 僅允許線程讀取另一個線程中其他正在運行的事務已提交的值。
- 重復讀取 –如果在同一事務中兩次讀取相同的數據,則它將始終相同。 此級別保證一旦讀取就不會更改任何數據。
- 可序列化 –事務在所有級別都處于鎖定狀態(讀取,范圍和寫入鎖定),因此,它們以固定的順序執行。 它不允許并發事務并導致性能下降。
使用“可重復讀取”隔離級別,從事務開始就維護數據庫的狀態。 如果您檢索會話1的值,則在會話2更新值,在會話1再次檢索它會返回相同的結果。
6.源代碼下載
- 下載源代碼
- 休眠性能調整
翻譯自: https://www.javacodegeeks.com/2016/05/understanding-transactional-annotation-spring.html
總結
以上是生活随笔為你收集整理的在Spring中了解事务注释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓手机彩信怎么发(安卓手机彩信)
- 下一篇: DDOS平台 登陆(DDOS页端平台登陆