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

Spring框架事務(wù)屬性中事務(wù)隔離級(jí)別與傳播行為全面講解

 更新時(shí)間:2022年11月09日 09:53:51   作者:學(xué)習(xí)使我快樂T  
這篇文章主要介紹了Spring框架聲明式事務(wù)的事務(wù)隔離級(jí)別和事務(wù)傳播行為,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧

一、事務(wù)隔離級(jí)別

①介紹

數(shù)據(jù)庫系統(tǒng)必須具有隔離并發(fā)運(yùn)行各個(gè)事務(wù)的能力,使它們不會(huì)相互影響,避免各種并發(fā)問題。一個(gè)事 務(wù)與其他事務(wù)隔離的程度稱為隔離級(jí)別。SQL標(biāo)準(zhǔn)中規(guī)定了多種事務(wù)隔離級(jí)別,不同隔離級(jí)別對(duì)應(yīng)不同 的干擾程度,隔離級(jí)別越高,數(shù)據(jù)一致性就越好,但并發(fā)性越弱。

隔離級(jí)別一共有四種:

讀未提交:READ UNCOMMITTED

允許Transaction01讀取Transaction02未提交的修改。

讀已提交:READ COMMITTED、

要求Transaction01只能讀取Transaction02已提交的修改。

可重復(fù)讀:REPEATABLE READ

確保Transaction01可以多次從一個(gè)字段中讀取到相同的值,即Transaction01執(zhí)行期間禁止其它 事務(wù)對(duì)這個(gè)字段進(jìn)行更新。

串行化:SERIALIZABLE

確保Transaction01可以多次從一個(gè)表中讀取到相同的行,在Transaction01執(zhí)行期間,禁止其它 事務(wù)對(duì)這個(gè)表進(jìn)行添加、更新、刪除操作??梢员苊馊魏尾l(fā)問題,但性能十分低下。

②使用方式

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    @Override
    @Transactional(
            isolation = Isolation.DEFAULT
    )
    public void buyBook(Integer userId, Integer bookId) {
//            try {
//                TimeUnit.SECONDS.sleep(5);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
        //查詢圖書的價(jià)格
        Integer price = bookDao.getPriceByBookId(bookId);
        //更新圖書的庫存
        bookDao.updateStock(bookId);
        //更新用戶的余額
        bookDao.updateBalance(userId,price);
        System.out.println(1/0);
    }
}

二、事務(wù)傳播行為

①介紹

當(dāng)事務(wù)方法被另一個(gè)事務(wù)方法調(diào)用時(shí),必須指定事務(wù)應(yīng)該如何傳播。例如:方法可能繼續(xù)在現(xiàn)有事務(wù)中 運(yùn)行,也可能開啟一個(gè)新事務(wù),并在自己的事務(wù)中運(yùn)行。

②測(cè)試

public interface CheckoutService {
}
@Service
public class CheckoutServiceImpl implements CheckoutService {
}

在BookController中添加方法,然后到Service創(chuàng)建這個(gè)方法

@Autowired
private CheckoutService checkoutService;
public void checkout(Integer userId,Integer[] bookIds) {
    checkoutService.chekout(userId,bookIds);
}

CheckoutService接口添加方法

    void checkout(Integer userId, Integer[] bookIds);
}

CheckoutServiceImpl實(shí)現(xiàn)類添加方法

@Override
public void checkout(Integer userId, Integer[] bookIds) {
}

然后我們添加一個(gè)結(jié)賬操作

    public void checkout(Integer userId,Integer[] bookIds) {
        checkoutService.checkout(userId,bookIds);
    }
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    @Override
    @Transactional(
            isolation = Isolation.DEFAULT
    )
    public void buyBook(Integer userId, Integer bookId) {
//            try {
//                TimeUnit.SECONDS.sleep(5);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
        //查詢圖書的價(jià)格
        Integer price = bookDao.getPriceByBookId(bookId);
        //更新圖書的庫存
        bookDao.updateStock(bookId);
        //更新用戶的余額
        bookDao.updateBalance(userId,price);
//        System.out.println(1/0);
    }
}
@Service
public class CheckoutServiceImpl implements CheckoutService {
    @Autowired
    private BookService bookService;
    @Override
    @Transactional
    public void checkout(Integer userId, Integer[] bookIds) {
        for (Integer bookId : bookIds) {
            bookService.buyBook(userId,bookId);
        }
    }
}

此時(shí)會(huì)發(fā)現(xiàn)我們兩個(gè)方法都添加了@Transactional注解,但它會(huì)默認(rèn)的使用我們的結(jié)賬方法添加的注解

我們可以通過propagation中的Propagations屬性設(shè)置事務(wù)傳播行為

例:

@Transactional(propagation = Propagation.REQUIRED)使用的是我們調(diào)用者的事務(wù)

@Transactional(propagation = Propagation.REQUIRES_NEW)使用的是我們被調(diào)用的方法本身的事務(wù)

如:

@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookDao bookDao;
    @Override
    @Transactional(
//            isolation = Isolation.DEFAULT
            propagation = Propagation.REQUIRES_NEW
    )
    public void buyBook(Integer userId, Integer bookId) {
//            try {
//                TimeUnit.SECONDS.sleep(5);
//            } catch (InterruptedException e) {
//                e.printStackTrace();
//            }
        //查詢圖書的價(jià)格
        Integer price = bookDao.getPriceByBookId(bookId);
        //更新圖書的庫存
        bookDao.updateStock(bookId);
        //更新用戶的余額
        bookDao.updateBalance(userId,price);
//        System.out.println(1/0);
    }
}

到此這篇關(guān)于Spring框架事務(wù)屬性中事務(wù)隔離級(jí)別與傳播行為全面講解的文章就介紹到這了,更多相關(guān)Spring事務(wù)隔離級(jí)別與傳播行為內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解

    Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解

    這篇文章主要介紹了Java System.getProperty()-獲取系統(tǒng)參數(shù)案例詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • java 讀取文件方法的總結(jié)

    java 讀取文件方法的總結(jié)

    這篇文章主要介紹了java 讀取文件方法的總結(jié)的相關(guān)資料,這里提供文件讀取5種方法并附實(shí)例,需要的朋友可以參考下
    2017-08-08
  • Eclipse搭建spring開發(fā)環(huán)境圖文教程(推薦)

    Eclipse搭建spring開發(fā)環(huán)境圖文教程(推薦)

    下面小編就為大家?guī)硪黄狤clipse搭建spring開發(fā)環(huán)境圖文教程(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java線程的聯(lián)合用法實(shí)例分析

    Java線程的聯(lián)合用法實(shí)例分析

    這篇文章主要介紹了Java線程的聯(lián)合用法,結(jié)合實(shí)例形式分析了java線程聯(lián)合的原理、實(shí)現(xiàn)方法及相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • java集合框架 arrayblockingqueue應(yīng)用分析

    java集合框架 arrayblockingqueue應(yīng)用分析

    ArrayBlockingQueue是一個(gè)由數(shù)組支持的有界阻塞隊(duì)列。此隊(duì)列按 FIFO(先進(jìn)先出)原則對(duì)元素進(jìn)行排序。隊(duì)列的頭部 是在隊(duì)列中存在時(shí)間最長(zhǎng)的元素
    2012-11-11
  • 淺談Java模板引擎性能對(duì)比

    淺談Java模板引擎性能對(duì)比

    本篇文章主要介紹了淺談Java模板引擎性能對(duì)比 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • java 分割csv數(shù)據(jù)的實(shí)例詳解

    java 分割csv數(shù)據(jù)的實(shí)例詳解

    這篇文章主要介紹了java 分割csv數(shù)據(jù)的實(shí)例詳解的相關(guān)資料,這里提供了簡(jiǎn)單實(shí)例,需要的朋友可以參考下
    2017-07-07
  • @PreAuthorize、@PostAuthorize、@PreFilter、@PostFilter注解的用法詳解

    @PreAuthorize、@PostAuthorize、@PreFilter、@PostFilter注解的用法詳解

    這篇文章主要介紹了@PreAuthorize、@PostAuthorize、@PreFilter、@PostFilter注解的用法詳解,通過在方法上添加@PreAuthorize注解,可以指定需要滿足的權(quán)限條件,只有滿足條件的用戶才能執(zhí)行該方法,需要的朋友可以參考下
    2023-10-10
  • java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例

    java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例

    這篇文章主要介紹了java短信驗(yàn)證碼獲取次數(shù)限制實(shí)例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-01-01
  • 如何使用Java中的Optional

    如何使用Java中的Optional

    這篇文章主要介紹了如何使用Java中的Optional,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-11-11

最新評(píng)論

思南县| 滦平县| 康平县| 上林县| 特克斯县| 永嘉县| 邵阳县| 阳江市| 休宁县| 克东县| 曲靖市| 涡阳县| 水富县| 依安县| 商河县| 石狮市| 留坝县| 巴林右旗| 宣汉县| 启东市| 肇庆市| 岗巴县| 锡林浩特市| 新泰市| 三穗县| 安龙县| 阳原县| 五寨县| 衡阳市| 定边县| 苍溪县| 蒙城县| 腾冲县| 永安市| 天等县| 福建省| 临澧县| 米泉市| 昌邑市| 元朗区| 滁州市|