最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring使用注解方式處理事務(wù)

 更新時(shí)間:2022年08月26日 14:22:20   作者:少年啊!  
這篇文章主要為大家詳細(xì)介紹了Spring使用注解方式處理事務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Spring有專門的類來處理事務(wù),在這之前我們先要理解Spring處理事務(wù)中的幾個(gè)概念:

1.接口:

事務(wù)管理器是PlatformTransactionManager接口,在接口中定義了事務(wù)的主要函數(shù):commit(); 事務(wù)提交
rollback();事務(wù)回滾

2.事務(wù)管理器接口的實(shí)現(xiàn)類:

1)DataSourcTransactionManager:使用jdb或者mybatis訪問數(shù)據(jù)庫(kù)時(shí)使用的
<bean id=”myDataSource” class=“xx包.DataSourceTransactionManager”>
必須指定數(shù)據(jù)源
</bean>
2)HibernateTransactionManager:使用Hibernate框架時(shí),使用的實(shí)現(xiàn)類
3)事務(wù)超時(shí):TIMEOUT,秒為單位,默認(rèn)是-1,使用數(shù)據(jù)庫(kù)的默認(rèn)超時(shí)時(shí)間
超時(shí):指事務(wù)的最長(zhǎng)執(zhí)行時(shí)間,也就是一個(gè)函數(shù)最長(zhǎng)的執(zhí)行時(shí)間.當(dāng)時(shí)間到了,函數(shù)沒有
執(zhí)行完畢,Spring會(huì)回滾該函數(shù)的執(zhí)行(回滾事務(wù))

3.事務(wù)的傳播行為:事務(wù)在函數(shù)之間傳遞,函數(shù)怎么使用事務(wù)。通過傳播行為指定函數(shù)怎么使用事務(wù)

有7個(gè)傳播行為:
事務(wù)的傳播行為常量都是以PROPAGATION_開頭,形如:PROPAGATION_XXX
PROPAGATION_REQUIRED 指定的函數(shù)必須在事務(wù)內(nèi)執(zhí)行。若當(dāng)前存在事務(wù),就加入到當(dāng)前事務(wù)中, 若當(dāng)前沒事務(wù),就創(chuàng)建一個(gè)新事務(wù)。Spring默認(rèn)的事務(wù)傳播行為
PROPAGATION_REQUIES_NEW 總是新建一個(gè)新事務(wù),若當(dāng)前存在事務(wù),就將當(dāng)前事務(wù)掛起來,直 到新事務(wù)執(zhí)行完畢
PROPAGATION_SUPPORTS 指定的函數(shù)支持當(dāng)前事務(wù),但若當(dāng)前沒事務(wù),也可以使用非事務(wù)方式執(zhí) 行
PROPAGATION_MANDATORY
PROPAGATION_NESTED
PROPAGATION_NEVER
PROPAGATION_NOT_SUPPORTED

我們了解了Spring處理事務(wù)的一些概念以及一些常用的類,那么現(xiàn)在在Spring中使用事務(wù)

項(xiàng)目目錄:

要spring使用事務(wù)的注解就需要在application-config.xml(Spring核心配置文件)添加頭部信息:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
? ? ? ?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
? ? ? ?xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
? ? ? ?xsi:schemaLocation="http://www.springframework.org/schema/beans
?http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
?http://www.springframework.org/schema/tx
?http://www.springframework.org/schema/tx/spring-tx-2.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

<!--聲明事務(wù)管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
? ? <property name="dataSource" ref="myDataSource"/>
</bean>
<!--聲明事務(wù)的注解驅(qū)動(dòng)
? transaction-manager:事務(wù)管理器對(duì)象的id
-->
<tx:annotation-driven transaction-manager="transactionManager"/>

BuyGoodsServiceImpl文件:

/**使用注解來設(shè)值事務(wù)的屬性(傳播行為,隔離等級(jí),超時(shí),當(dāng)哪些異常發(fā)生的時(shí)候觸發(fā)回滾事務(wù))
?* 注意:該注解必須使用在公有函數(shù)上,而且拋出的異常必需繼承RuntimeException
?* */
@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,timeout = 20,
rollbackFor = {NullPointerException.class,NotEnoughException.class})
public void buyGoods(int goodsId, int nums)
? ? ? ? throws NullPointerException, NotEnoughException{
? ? /**生成銷售的訂單
? ? ?* */
? ? Sale sale=new Sale();
? ? sale.setGid(goodsId);
? ? sale.setNum(nums);
? ? saleDao.insertSale(sale);

? ? /**修改庫(kù)存
? ? ?* */
? ? Goods goods=goodsDao.selectGoodsById(goodsId);
? ? if(goods==null){
? ? ? ? throw new NullPointerException(goodsId+"沒有該商品");
? ? }
? ? if(goods.getAmount()<nums){
? ? ? ? throw new NotEnoughException(goodsId+"庫(kù)存不足");
? ? }

? ? /**操作庫(kù)存
? ? ?* */
? ? goods.setAmount(nums);
? ? goodsDao.updateGoods(goods);
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java線程的基礎(chǔ)實(shí)例解析

    java線程的基礎(chǔ)實(shí)例解析

    java中線程的基本方法的熟練使用是精通多線程編程的必經(jīng)之路,線程相關(guān)的基本方法有wait,notify,notifyAll,sleep,join,yield等,本文淺要的介紹一下它們的使用方式
    2021-06-06
  • 深入淺析Mybatis的缺陷問題

    深入淺析Mybatis的缺陷問題

    Mybatis是業(yè)界非常流行的持久層框架,輕量級(jí)、易用,在金融IT領(lǐng)域完全是領(lǐng)軍地位,比Hibernate更受歡迎,優(yōu)勢(shì)非常多,也是非常值得我們學(xué)習(xí)的。這篇文章主要介紹了Mybatis的缺陷問題的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 如何解決java:找不到符號(hào)符號(hào):類__(使用了lombok的注解)

    如何解決java:找不到符號(hào)符號(hào):類__(使用了lombok的注解)

    在使用IntelliJ IDEA開發(fā)Java項(xiàng)目時(shí),可能遇到通過@lombok注解自動(dòng)生成get和set方法不生效的問題,解決這一問題需要幾個(gè)步驟,首先,確認(rèn)Lombok插件已在IDEA中安裝并啟用,其次,確保項(xiàng)目中已添加Lombok的依賴,對(duì)于Maven和Gradle項(xiàng)目
    2024-10-10
  • Java中的Map允許有重復(fù)元素嗎?

    Java中的Map允許有重復(fù)元素嗎?

    今天小編就為大家分享一篇關(guān)于Java中的Map允許有重復(fù)元素嗎?,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • spring boot開發(fā)遇到坑之spring-boot-starter-web配置文件使用教程

    spring boot開發(fā)遇到坑之spring-boot-starter-web配置文件使用教程

    Spring Boot支持容器的自動(dòng)配置,默認(rèn)是Tomcat,當(dāng)然我們也是可以進(jìn)行修改的。這篇文章給大家介紹了spring boot開發(fā)遇到坑之spring-boot-starter-web配置文件使用教程,需要的朋友參考下吧
    2018-01-01
  • Log4j新手快速入門教程

    Log4j新手快速入門教程

    這篇文章主要給大家介紹了關(guān)于Log4j新手入門的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Log4j具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java中Spring的單例模式使用

    Java中Spring的單例模式使用

    這篇文章主要介紹了Java中Spring的單例模式使用,spring中的單例也不影響應(yīng)用并發(fā)訪問。大多數(shù)時(shí)候客戶端都在訪問我們應(yīng)用中的業(yè)務(wù)對(duì)象,為減少并發(fā)控制,不應(yīng)該在業(yè)務(wù)對(duì)象中設(shè)置那些容易造成出錯(cuò)的成員變量,下面一起進(jìn)入文章了解更多詳細(xì)內(nèi)容吧
    2022-01-01
  • Java嵌套for循環(huán)的幾種常見優(yōu)化方案

    Java嵌套for循環(huán)的幾種常見優(yōu)化方案

    這篇文章主要給大家介紹了關(guān)于Java嵌套for循環(huán)的幾種常見優(yōu)化,在Java中優(yōu)化嵌套for循環(huán)可以通過以下幾種方式來提高性能和效率,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • java編譯命令和啟動(dòng)命令的使用方式

    java編譯命令和啟動(dòng)命令的使用方式

    Java開發(fā)中,編譯源文件需使用javac命令,該命令能將.java文件編譯成.class字節(jié)碼文件,后者可在JVM上運(yùn)行,常用編譯選項(xiàng)包括-d指定輸出目錄,-classpath設(shè)置類搜索路徑等,啟動(dòng)Java程序使用java命令,它加載并運(yùn)行包含main方法的類
    2024-10-10
  • java利用Ant腳本生成war包全過程

    java利用Ant腳本生成war包全過程

    這篇文章主要為大家詳細(xì)介紹了java利用Ant腳本生成war包全過程,感興趣的朋友可以參考一下
    2016-03-03

最新評(píng)論

新巴尔虎左旗| 红河县| 柯坪县| 栾川县| 漳浦县| 松溪县| 赣榆县| 芮城县| 邢台市| 彭水| 托里县| 千阳县| 神木县| 崇义县| 慈利县| 高邑县| 革吉县| 广河县| 纳雍县| 新干县| 黎城县| 洛扎县| 新巴尔虎右旗| 商河县| 屏边| 吉安县| 宜兰市| 永康市| 黎平县| 扶沟县| 武定县| 通榆县| 临高县| 盐边县| 庐江县| 儋州市| 安陆市| 上蔡县| 新疆| 连平县| 东安县|