中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring聲明式事務控制是什么

發布時間:2021-11-03 15:30:28 來源:億速云 閱讀:197 作者:iii 欄目:編程語言

這篇文章主要講解了“Spring聲明式事務控制是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Spring聲明式事務控制是什么”吧!

一、編程式事務控制相關對象

1PlatformTransactionManager 接口是 spring 的事務管理器,它里面提供了我們常用的操作事務的方法。

Spring聲明式事務控制是什么

2TransactionDefinition

 

TransactionDefinition 是事務的定義信息對象,里面有如下方法:

Spring聲明式事務控制是什么

1)事務隔離級別:設置隔離級別,可以解決事務并發產生的問題,如臟讀、不可重復讀和虛讀。

2)事務傳播行為

REQUIRED:如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。一般的選擇(默認值)。

SUPPORTS:支持當前事務,如果當前沒有事務,就以非事務方式執行(沒有事務)。

MANDATORY:使用當前的事務,如果當前沒有事務,就拋出異常。

REQUERS_NEW:新建事務,如果當前在事務中,把當前事務掛起。

NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

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

NESTED:如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行 REQUIRED 類似的操作。

超時時間:默認值是-1,沒有超時限制。如果有,以秒為單位進行設置。

是否只讀:建議查詢時設置為只讀。

3TransactionStatus

TransactionStatus 接口提供的是事務具體的運行狀態,方法介紹如下。

Spring聲明式事務控制是什么

二、基于 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 配置文件

<!&mdash;之前省略datsSourcejdbcTemplate、平臺事務管理器的配置-->

<!--組件掃描-->

<context:component-scan base-package="com.itheima"/>

<!--事務的注解驅動-->

<tx:annotation-driven/>

感謝各位的閱讀,以上就是“Spring聲明式事務控制是什么”的內容了,經過本文的學習后,相信大家對Spring聲明式事務控制是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

年辖:市辖区| 敖汉旗| 竹北市| 青州市| 马山县| 凭祥市| 四川省| 德令哈市| 京山县| 柯坪县| 台州市| 上林县| 木里| 青龙| 滨海县| 夏津县| 谷城县| 丹寨县| 通渭县| 和田市| 宜宾县| 昌平区| 左贡县| 旺苍县| 胶州市| 潞西市| 云安县| 天全县| 略阳县| 大港区| 新乡县| 阿克陶县| 临泽县| 门头沟区| 孝感市| 吐鲁番市| 金寨县| 宣恩县| 湾仔区| 中阳县| 临高县|