SpringBoot + 事務(wù)回滾簡(jiǎn)單使用

1、事務(wù)使用

在代碼中使用事務(wù)很簡(jiǎn)單,只需要在方法上添加好@Transactional注解即可

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *  服務(wù)實(shí)現(xiàn)類
 * </p>
 * @author 小吾
 * @since 2020-05-21
 */
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

    @Autowired
    private UserMapper userMapper;

    /**
     * 在方法上加上@Transactional注解,即可
     */
    @Transactional(rollbackFor = Exception.class)
    public String transactionNo1() {
        User user = new User();
        user.setName("小吾1號(hào)");
        user.setSex(1);
        userMapper.insert(user);
        System.out.println("沒(méi)有異常事務(wù)不會(huì)觸發(fā),生成數(shù)據(jù)");
        return "新增成功,沒(méi)有異常";
    }

    @Transactional(rollbackFor = Exception.class)
    public String transactionNo2() {
        User user = new User();
        user.setName("小吾2號(hào)");
        user.setSex(1);
        userMapper.insert(user);
        //這里我們給他出現(xiàn)一個(gè)異常使事務(wù)進(jìn)行回滾
        int x = 2 / 0;
        //如果我們這里想要拋出自己的異常第岖,可以使用try{}catch (){}拋出自定義異常信息
        System.out.println("這一段輸出,就不會(huì)輸出试溯,直接執(zhí)行事務(wù)回滾操作");
        return "新增失敗蔑滓,異常捕獲,事務(wù)回滾";
    }

}

2、@Transactional簡(jiǎn)單介紹+使用方式

  1. @Transactional注解使用在接口實(shí)現(xiàn)類或者接口實(shí)現(xiàn)方法上键袱,不能實(shí)現(xiàn)在接口類中
  2. @Transactional注解方法不能被其他方法間接調(diào)用燎窘,否則事務(wù)會(huì)失效
    /** 我們通過(guò)非事務(wù)方法調(diào)用事務(wù)方法,這時(shí)會(huì)導(dǎo)致事務(wù)失效 */
    public String transactionNo3() {
        return transactionalNo3();
    }

    /** 這里觸發(fā)異常蹄咖,小吾3號(hào)會(huì)直接新增褐健,不會(huì)進(jìn)行回滾 */
    @Transactional(rollbackFor = Exception.class)
    public String transactionalNo3(){
        User user = new User();
        user.setName("小吾3號(hào)");
        user.setSex(1);
        userMapper.insert(user);
        int x = 2 / 0;
        return "新增失敗,異常捕獲澜汤,事務(wù)回滾";
    }
  1. @Transactional注解只能使用在public方法上面蚜迅,否則事務(wù)會(huì)失效。例:作用在private方法
    /**
     * 我們?cè)诳刂茖臃椒ㄉ鲜褂胮rivate這時(shí)我們會(huì)發(fā)現(xiàn)事務(wù)失效俊抵,數(shù)據(jù)新增成功
     */
    @GetMapping("/transactionNo4")
    @Transactional(rollbackFor = Exception.class)
    private String transactionNo4(){
        System.out.println("測(cè)試事務(wù)是否回滾成功谁不,方法4-非public方法使用事務(wù)");
        User user = new User();
        user.setName("小吾4號(hào)");
        user.setSex(1);
        userMapper.insert(user);
        //備注,我在控制層使用mapper接口是相當(dāng)不符合代碼規(guī)范的徽诲,這里只用于測(cè)試刹帕,勿怪
        int x = 2 / 0;
        return "方法4";
    }
  1. @Transactional注解對(duì)方法內(nèi)線程方法無(wú)法作用到,線程出現(xiàn)異常也無(wú)法導(dǎo)致事務(wù)回滾
    @Transactional(rollbackFor = Exception.class)
    public String transactionNo5() {
        User user = new User();
        user.setName("小吾5號(hào)");
        user.setSex(1);
        userMapper.insert(user);

        Timer timer = new Timer();
        timer.schedule(
                new TimerTask() {
                    @Override
                    public void run() {
                        System.out.println("hello");
                        //線程內(nèi)部出現(xiàn)異常谎替,并不會(huì)導(dǎo)致事務(wù)回滾
                        int x = 2/0;
                    }
                },2000,4000
        );
        //同時(shí)線程外部異常也不會(huì)導(dǎo)致線程停止偷溺,但會(huì)使事務(wù)回滾
        int x = 2 / 0;
        return "事務(wù)與線程";
    }

@Transactional注解 rollbackFor默認(rèn)是捕獲(RuntimeException)運(yùn)行時(shí)異常類以及其子類的,當(dāng)方法拋出(checked exception)編譯時(shí)異常是不會(huì)進(jìn)行捕獲的院喜,例如:IOException亡蓉;需要捕獲這類異常我們就要修改rollbackFor的作用范圍。

Transactional.png

關(guān)于事務(wù)的介紹還有很多的不足喷舀,這里我們只做了一些簡(jiǎn)單的使用和介紹,后期會(huì)不定期更新淋肾。
至此SpringBoot事務(wù)回滾簡(jiǎn)單使用就寫完了硫麻,如有不懂可以加SpringBoot技術(shù)交流群14群號(hào):719099151我是小吾,有問(wèn)題可以直接在群里@我

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末樊卓,一起剝皮案震驚了整個(gè)濱河市拿愧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌碌尔,老刑警劉巖浇辜,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異唾戚,居然都是意外死亡柳洋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門叹坦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熊镣,“玉大人,你說(shuō)我怎么就攤上這事⌒鞔眩” “怎么了测蹲?”我有些...
    開(kāi)封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)鬼吵。 經(jīng)常有香客問(wèn)我扣甲,道長(zhǎng),這世上最難降的妖魔是什么齿椅? 我笑而不...
    開(kāi)封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任琉挖,我火速辦了婚禮,結(jié)果婚禮上媒咳,老公的妹妹穿的比我還像新娘粹排。我一直安慰自己,他們只是感情好涩澡,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布顽耳。 她就那樣靜靜地躺著,像睡著了一般妙同。 火紅的嫁衣襯著肌膚如雪射富。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天粥帚,我揣著相機(jī)與錄音胰耗,去河邊找鬼。 笑死芒涡,一個(gè)胖子當(dāng)著我的面吹牛柴灯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播费尽,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赠群,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了旱幼?” 一聲冷哼從身側(cè)響起查描,我...
    開(kāi)封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎柏卤,沒(méi)想到半個(gè)月后冬三,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缘缚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年勾笆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忙灼。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匠襟,死狀恐怖钝侠,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酸舍,我是刑警寧澤帅韧,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站啃勉,受9級(jí)特大地震影響忽舟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淮阐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一叮阅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泣特,春花似錦浩姥、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至膏孟,卻和暖如春眯分,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背柒桑。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工弊决, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人魁淳。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓飘诗,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親界逛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疚察,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361