Spring宣告式事務管理與配置介紹
一、Spring宣告式事務配置的五種方式
前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。
總結如下:
Spring配置檔案中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。
DataSource、TransactionManager這兩部分只是會根據資料訪問方式有所變化,比如使用Hibernate進行資料訪問時,DataSource實際為SessionFactory,TransactionManager的實現為HibernateTransactionManager。
具體如下圖:
根據代理機制的不同,總結了五種Spring事務的配置方式,配置檔案如下:
第一種方式:每個Bean都有一個代理
1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <beans xmlns="http://www.springframework.org/schema/beans" |
3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" |
4 |
xmlns:aop="http://www.springframework.org/schema/aop" |
5 | xsi:schemaLocation="http://www.springframework.org/schema/beans |
6 | http://www.springframework.org/schema/beans/spring-beans-2.5.xsd |
7 | http://www.springframework.org/schema/context |
8 | http://www.springframework.org/schema/context/spring-context-2.5.xsd |
9 |
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> |
10 | |
11 | <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> |
12 | <property name="configLocation" value="classpath:hibernate.cfg.xml" /> |
13 | <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> |
14 | </bean> |
15 | |
16 | <!-- 定義事務管理器(宣告式的事務) --> |
17 | <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> |
18 | <property name="sessionFactory" ref="sessionFactory" /> |
19 | </bean> |
20 | |
21 | <!-- 配置DAO --> |
22 | <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl"> |
23 | <property name="sessionFactory" ref="sessionFactory" /> |
24 | </bean> |
25 | |
26 | <bean id="userDao" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> |
27 | <!-- 配置事務管理器 --> |
28 | <property name="transactionManager" ref="transactionManager" /> |
29 | <property name="target" ref="userDaoTarget" /> |
30 | <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" /> |
31 | <!-- 配置事務屬性 --> |
32 | <property name="transactionAttributes"> |
33 | <props> |
34 | <prop key="*">PROPAGATION_REQUIRED</prop> |
35 | </props> |
36 | </property> |
37 | </bean> |
38 | </beans> |
第二種方式:所有Bean共享一個代理基類
1 | ...... |
2 | <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> |
3 | <property name="configLocation" value="classpath:hibernate.cfg.xml" /> |
4 | <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> |
5 | </bean> |
6 | |
7 | <!-- 定義事務管理器(宣告式的事務) --> |
8 | <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> |
9 | <property name="sessionFactory" ref="sessionFactory" /> |
10 | </bean> |
11 | |
12 | <bean id="transactionBase" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" lazy-init="true" abstract="true"> |
13 | <!-- 配置事務管理器 --> |
14 | <property name="transactionManager" ref="transactionManager" /> |
15 | <!-- 配置事務屬性 --> |
16 | <property name="transactionAttributes"> |
17 | <props> |
18 | <prop key="*">PROPAGATION_REQUIRED</prop> |
19 | </props> |
20 | </property> |
21 | </bean> |
22 | |
23 | <!-- 配置DAO --> |
24 | <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl"> |
25 | <property name="sessionFactory" ref="sessionFactory" /> |
26 | </bean> |
27 | |
28 | <bean id="userDao" parent="transactionBase"> |
29 | <property name="target" ref="userDaoTarget" /> |
30 | </bean> |
第三種方式:使用攔截器
1 | ...... |
2 | <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> |
3 | <property name="configLocation" value="classpath:hibernate.cfg.xml" /> |
4 | <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> |
5 | </bean> |
6 | |
7 | <!-- 定義事務管理器(宣告式的事務) --> |
8 | <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> |
9 | <property name="sessionFactory" ref="sessionFactory" /> |
10 | </bean> |
11 | |
12 | <bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"> |
13 | <property name="transactionManager" ref="transactionManager" /> |
14 | <!-- 配置事務屬性 --> |
15 | <property name="transactionAttributes"> |
16 | <props> |
17 | <prop key="*">PROPAGATION_REQUIRED</prop> |
18 | </props> |
19 | </property> |
20 | </bean> |
21 | |
22 | <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> |
23 | <property name="beanNames"> |
24 | <list> |
25 | <value>*Dao</value> |
26 | </list> |
27 | </property> |
28 | <property name="interceptorNames"> |
29 | <list> |
30 | <value>transactionInterceptor</value> |
31 | </list> |
32 | </property> |
33 | </bean> |
34 | |
35 | <!-- 配置DAO --> |
36 | <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl"> |
37 | <property name="sessionFactory" ref="sessionFactory" /> |
38 | </bean> |
第四種方式:使用tx標籤配置的攔截器
1 | <?xml version="1.0" encoding="UTF-8"?> |
2 | <beans xmlns="http://www.springframework.org/schema/beans" |
3 | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
4 | xmlns:context="http://www.springframework.org/schema/context" |
5 | xmlns:aop="http://www.springframework.org/schema/aop" |
6 | xmlns:tx="http://www.springframework.org/schema/tx" |
7 | xsi:schemaLocation="http://www.springframework.org/schema/beans |
8 | http://www.springframework.org/schema/beans/spring-beans-2.5.xsd |
9 | http://www.springframework.org/schema/context |
10 | http://www.springframework.org/schema/context/spring-context-2.5.xsd |
11 | http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd |
12 | http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> |
13 | <context:annotation-config /> |
14 | <context:component-scan base-package="com.bluesky" /> |
15 | |
16 | <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> |
17 | <property name="configLocation" value="classpath:hibernate.cfg.xml" /> |
18 | <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" /> |
19 | </bean> |
20 | |
21 | <!-- 定義事務管理器(宣告式的事務) --> |
22 | <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> |
23 | <property name="sessionFactory" ref="sessionFactory" /> |
24 | </bean> |
25 | |
26 | <tx:advice id="txAdvice" transaction-manager="transactionManager"> |
27 | <tx:attributes> |
28 | <tx:method name="*" propagation="REQUIRED" /> |
29 | </tx:attributes> |
30 |
相關推薦Spring宣告式事務管理與配置介紹一、Spring宣告式事務配置的五種方式 前段時間對Spring的事務配置做了比較深入的研究,在此之間對Spring的事務配置雖說也配置過,但是一直沒有一個清楚的認識。通過這次的學習發覺Spring的事務配置只要把思路理清,還是比較好掌握的。 總結如下: Sprin spring宣告式事務管理方式( 基於tx和aop名字空間的xml配置[email轉自:https://www.cnblogs.com/niceyoo/p/8732891.html 1. 宣告式事務管理分類 宣告式事務管理也有兩種常用的方式, 一種是基於tx和aop名字空間的xml配置檔案,另一種就是基於@Transactional註解。 顯然基於註解的方式更簡單 Spring宣告式事務管理、事務的傳播行為xml配置1. <tx:method name="insert*" propagation="REQUIRED" />中name的值是ServiceImpl中各個要加入事物管理的方法的方法名。 <!-- 事務管理: Spring宣告式事務管理 。 事務管理及spring基於註解的宣告式事務管理的配置和用法因為前幾天看一個專案文件出現“本系統採用基於Spring的宣告式事務控制”,才根據文件和程式碼瞭解了一下事務管理的相關知識。這裡對自己的學習做個總結。 一:相關概念 1.事務:事務是一系列的動作,它們 第十二講:12,spring宣告式事務管理-註解式1,複製專案spring404 ,改名spring404-3。修改BankServiceImpl類,添加註解,package com.cruise.service.impl;import org.springframework.transaction.annotation.Tra 第十一講:11.spring宣告式事務管理-xml方式1,複製專案spring404 ,改名spring404-2,修改BankServiceImpl類,刪除宣告式事務的程式碼。宣告式事務管理的方式缺點是,事務程式碼嚴重嵌入邏輯程式碼中 package com.cruise.service.impl; import org.springframewor spring宣告式事務管理:基於註解的方式1)在spring.xml中配置事務管理器DataSourceTransactionManager,<bean id="txManager" class="org.springframework. Spring宣告式事務管理及事務巢狀一> 事務配置 Spring動態代理的一個重要特徵是,它是針對介面的,所以我們的dao要通過動態代理來讓spring接管事務,就必須在dao前面抽象出一個介面,當然如果沒有這樣的介面,那麼spring會使用CGLIB來解決問題。 一般地,使用Spri Spring宣告式事務管理原始碼解析核心介面 1. PlatformTransactionManager:事務管理器頂級介面:各持久化框架要想接入Spring的事務管理,必須自行提供該介面實現 2. TransactionDefinition:事務的屬性頂級介面:其實現類封裝事務隔離級別、 淺談Spring宣告式事務管理ThreadLocal和JDKProxy寫這篇文章的目的,為了使大家更好的理解和摸清事務的規律,希望對新手學習事務這塊內容時有所幫助。 在我們開發一個應用時,很多時候我們的一個業務操作會對資料庫進行多次操作,有時候我們需要保證這麼一系列的操作要麼全部成功,要麼全部失敗,其實這個這個概念就是我們今天要談論的事務。 現在我們開發應用 spring 宣告式事務管理註解方式實現使用註解實現Spring的宣告式事務管理,更加簡單! 步驟: 1) 必須引入Aop相關的jar檔案 2) bean.xml中指定註解方式實現宣告式事務管理以及應用的事務管理器類 3)在需要新增事務控制的地方,寫上: @T spring事物配置,宣告式事務管理和基於@Transactional註解的使用spring支援程式設計式事務管理和宣告式事務管理兩種方式。 程式設計式事務管理使用TransactionTemplate或者直接使用底層的PlatformTransactionManager。對於程式設計式事務管理,spring推薦使用Transactio spring事務管理之三:宣告式事務管理:使用xml配置檔案的方式這種方式是開發中常見的一種方式:利用aop的思想,將需要事務管理的業務方法通過xml配置的方式,將事務管理加在該類的相關方法上。這種方法的優點是,一次xml配置,後期不用關心業務類增加或者減少,通過xml中配置的匹配資訊,會去找業務類所在的包和方法,然後加上事務。 重點是配置<tx:a spring事物管理之宣告式事務管理的xml配置spring宣告式事務管理:xml配置如下 <!-- ================== 事務管理 ================== --> <bean name="transactionManager" class="or Spring不同事務管理方式與宣告式事務管理區域性回滾處理方案Spring配置檔案中關於事務配置總是由三個組成部分,分別是DataSource、TransactionManager和代理機制這三部分,無論哪種配置方式,一般變化的只是代理機制這部分。 DataSource、TransactionManager這兩部分只是會根據資料訪問 宣告式事務管理三:基於註解的配置這種基於註解配置的宣告式事務管理方法式很簡單,很方便 (1) 像之前一樣恢復到初始狀態 (2) 配置事務管理器(注入連線池) (3) 開啟註解 宣告式事務管理二:基於AspectJ的xml配置下面講述的是宣告式事務管理的第二種方法,是基於AspectJ的xml配置的 (1) 引入AspectJ的java包(一種簡化的操作)並copy到web-INF (2) 配置事務管理器 &n Java程式設計師從笨鳥到菜鳥之(八十)細談Spring(九)spring+hibernate宣告式事務管理詳解分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!   淺談spring事務管理的2種方式:程式設計式事務管理和宣告式事務管理;以及@Transactional(rollbackFor=Exception.class)註解用法事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過 使用註解實現Spring的宣告式事務管理使用註解實現Spring的宣告式事務管理,更加簡單! 步驟: 1) 必須引入Aop相關的jar檔案 2) b |