您好,登錄后才能下訂單哦!
這篇文章主要講解了“Spring聲明式事務控制是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring聲明式事務控制是什么”吧!
一、編程式事務控制相關對象
1、PlatformTransactionManager 接口是 spring 的事務管理器,它里面提供了我們常用的操作事務的方法。
2、TransactionDefinition
TransactionDefinition 是事務的定義信息對象,里面有如下方法:
(1)事務隔離級別:設置隔離級別,可以解決事務并發產生的問題,如臟讀、不可重復讀和虛讀。
(2)事務傳播行為
REQUIRED:如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。一般的選擇(默認值)。
SUPPORTS:支持當前事務,如果當前沒有事務,就以非事務方式執行(沒有事務)。
MANDATORY:使用當前的事務,如果當前沒有事務,就拋出異常。
REQUERS_NEW:新建事務,如果當前在事務中,把當前事務掛起。
NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
NEVER:以非事務方式運行,如果當前存在事務,拋出異常。
NESTED:如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行 REQUIRED 類似的操作。
超時時間:默認值是-1,沒有超時限制。如果有,以秒為單位進行設置。
是否只讀:建議查詢時設置為只讀。
3、TransactionStatus
TransactionStatus 接口提供的是事務具體的運行狀態,方法介紹如下。
二、基于 XML 的聲明式事務控制
1、聲明式事務控制是什么?
Spring的聲明式事務顧名思義就是采用聲明的方式來處理事務。這里所說的聲明,就是指在配置文件中聲明,用在 Spring 配置文件中聲明式的處理事務來代替代碼式的處理事務。它的作用是事務管理不侵入開發的組件。具體來說,業務邏輯對象就不會意識到正在事務管理之中,事實上也應該如此,因為事務管理是屬于系統層面的服務,而不是業務邏輯的一部分,如果想要改變事務管理策劃的話,也只需要在定義文件中重新配置即可。而且在不需要事務管理的時候,只要在設定文件上修改一下,即可移去事務管理服務,無需改變代碼重新編譯,這樣維護起來極其方便。
2、聲明式事務控制的實現
(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)配置事務增強
<!--平臺事務管理器-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--事務增強配置-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
(3)配置事務 AOP 織入
<!--事務的aop增強-->
<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)測試事務控制轉賬業務代碼
@Override
public void transfer(String outMan, String inMan, double money) {
accountDao.out(outMan,money);
int i = 1/0;
accountDao.in(inMan,money);
}
三、基于注解的聲明式事務控制
1、注解配置聲明式事務控制
(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、平臺事務管理器的配置-->
<!--組件掃描-->
<context:component-scan base-package="com.itheima"/>
<!--事務的注解驅動-->
<tx:annotation-driven/>
感謝各位的閱讀,以上就是“Spring聲明式事務控制是什么”的內容了,經過本文的學習后,相信大家對Spring聲明式事務控制是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。