您好,登錄后才能下訂單哦!
這篇文章主要講解了“Spring聲明式事務(wù)控制是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Spring聲明式事務(wù)控制是什么”吧!
一、編程式事務(wù)控制相關(guān)對象
1、PlatformTransactionManager 接口是 spring 的事務(wù)管理器,它里面提供了我們常用的操作事務(wù)的方法。
2、TransactionDefinition
TransactionDefinition 是事務(wù)的定義信息對象,里面有如下方法:
(1)事務(wù)隔離級別:設(shè)置隔離級別,可以解決事務(wù)并發(fā)產(chǎn)生的問題,如臟讀、不可重復(fù)讀和虛讀。
(2)事務(wù)傳播行為
REQUIRED:如果當(dāng)前沒有事務(wù),就新建一個(gè)事務(wù),如果已經(jīng)存在一個(gè)事務(wù)中,加入到這個(gè)事務(wù)中。一般的選擇(默認(rèn)值)。
SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù),就以非事務(wù)方式執(zhí)行(沒有事務(wù))。
MANDATORY:使用當(dāng)前的事務(wù),如果當(dāng)前沒有事務(wù),就拋出異常。
REQUERS_NEW:新建事務(wù),如果當(dāng)前在事務(wù)中,把當(dāng)前事務(wù)掛起。
NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果當(dāng)前存在事務(wù),就把當(dāng)前事務(wù)掛起。
NEVER:以非事務(wù)方式運(yùn)行,如果當(dāng)前存在事務(wù),拋出異常。
NESTED:如果當(dāng)前存在事務(wù),則在嵌套事務(wù)內(nèi)執(zhí)行。如果當(dāng)前沒有事務(wù),則執(zhí)行 REQUIRED 類似的操作。
超時(shí)時(shí)間:默認(rèn)值是-1,沒有超時(shí)限制。如果有,以秒為單位進(jìn)行設(shè)置。
是否只讀:建議查詢時(shí)設(shè)置為只讀。
3、TransactionStatus
TransactionStatus 接口提供的是事務(wù)具體的運(yùn)行狀態(tài),方法介紹如下。
二、基于 XML 的聲明式事務(wù)控制
1、聲明式事務(wù)控制是什么?
Spring的聲明式事務(wù)顧名思義就是采用聲明的方式來處理事務(wù)。這里所說的聲明,就是指在配置文件中聲明,用在 Spring 配置文件中聲明式的處理事務(wù)來代替代碼式的處理事務(wù)。它的作用是事務(wù)管理不侵入開發(fā)的組件。具體來說,業(yè)務(wù)邏輯對象就不會(huì)意識到正在事務(wù)管理之中,事實(shí)上也應(yīng)該如此,因?yàn)槭聞?wù)管理是屬于系統(tǒng)層面的服務(wù),而不是業(yè)務(wù)邏輯的一部分,如果想要改變事務(wù)管理策劃的話,也只需要在定義文件中重新配置即可。而且在不需要事務(wù)管理的時(shí)候,只要在設(shè)定文件上修改一下,即可移去事務(wù)管理服務(wù),無需改變代碼重新編譯,這樣維護(hù)起來極其方便。
2、聲明式事務(wù)控制的實(shí)現(xiàn)
(1)引入tx命名空間
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
(2)配置事務(wù)增強(qiáng)
<!--平臺(tái)事務(wù)管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--事務(wù)增強(qiáng)配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
(3)配置事務(wù) AOP 織入
<!--事務(wù)的aop增強(qiáng)-->
<aop:config>
<aop:pointcut id="myPointcut" expression="execution(* com.itheima.service.impl.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"></aop:advisor>
</aop:config>
(4)測試事務(wù)控制轉(zhuǎn)賬業(yè)務(wù)代碼
@Override
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
三、基于注解的聲明式事務(wù)控制
1、注解配置聲明式事務(wù)控制
(1)編寫 AccoutDao
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void out(String outMan, double money) {
jdbcTemplate.update("update account set money=money-? where name=?",money,outMan);
}
public void in(String inMan, double money) {
jdbcTemplate.update("update account set money=money+? where name=?",money,inMan);
}
}
(2)編寫 AccoutService
@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao accountDao;
@Transactional(isolation = Isolation.READ_COMMITTED,propagation = Propagation.REQUIRED)
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
}
(3)編寫 applicationContext.xml 配置文件
<!—之前省略datsSource、jdbcTemplate、平臺(tái)事務(wù)管理器的配置-->
<!--組件掃描-->
<context:component-scan base-package="com.itheima"/>
<!--事務(wù)的注解驅(qū)動(dòng)-->
<tx:annotation-driven/>
感謝各位的閱讀,以上就是“Spring聲明式事務(wù)控制是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Spring聲明式事務(wù)控制是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。