事務(wù)

事務(wù)的概念和簡單使用

1.什么是聲明式事務(wù)娘香?
以方法為單位,進(jìn)行事務(wù)控制;拋出異常,事務(wù)回滾,最小的執(zhí)行單位為方法匀泊,決定執(zhí)行成敗是通過是否拋出異常來判斷的,拋出異常即執(zhí)行失敗

  1. Spring的聲明事務(wù)實(shí)現(xiàn)
    [1]事務(wù)管理是應(yīng)用系統(tǒng)開發(fā)中必不可少的一部分朵你。Spring 為事務(wù)管理提供了豐富的功能支持各聘。Spring 事務(wù)管理分為編碼式和聲明式的兩種方式。編程式事務(wù)指的是通過編碼方式實(shí)現(xiàn)事務(wù)撬呢;
    聲明式事務(wù)基于 AOP,將具體業(yè)務(wù)邏輯與事務(wù)處理解耦伦吠。聲明式事務(wù)管理使業(yè)務(wù)代碼邏輯不受污染, 因此在實(shí)際使用中聲明式事務(wù)用的比較多。
    聲明式事務(wù)有兩種方式,一種是在配置文件(xml)中做相關(guān)的事務(wù)規(guī)則聲明毛仪,另一種是基于@Transactional 注解的方式搁嗓,下面我們是針對注解的使用進(jìn)行講解

@Transactional:事務(wù)注解,對我們的實(shí)例類進(jìn)行事務(wù)聲明
它可以加到類上箱靴,也可以加到方法上腺逛,加到類上時,對類上的所有公有方法生效衡怀。如果類上也有棍矛,方法上也有,方法上的屬性會覆蓋類上的抛杨。
加到service的實(shí)現(xiàn)類上够委。
@EnableTransactionManagement 事務(wù)管理注解,開啟事務(wù)管理器,對聲明了@Transactional的類進(jìn)行管理

1主啟動類上加@EnableTransactionManagement 開啟事務(wù)管理

    package com.example.demo;
    
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @SpringBootApplication
    @MapperScan("com.example.demo.mapper")
    @EnableTransactionManagement
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }

2 service的實(shí)現(xiàn)類上加transactional 注解怖现,并在其中模擬產(chǎn)生異常茁帽,看是否回滾

    package com.example.demo.service;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Service;
    import org.springframework.transaction.annotation.Transactional;
    
    import com.example.demo.domain.Person;
    import com.example.demo.domain.Population;
    import com.example.demo.domain.ResultMsg;
    import com.example.demo.mapper.PersonMapper;
    import com.example.demo.mapper.PopulationMapper;
    @Service
    @Transactional(rollbackFor={RuntimeException.class,Exception.class})
    public class PopulationServiceImpl implements IPopulationService {
        @Resource
        PopulationMapper populationMapper;
        @Resource
        PersonMapper personMapper;
        @Override
        @Transactional
        public ResultMsg save(Person person, Population population) {
            
            ResultMsg rm=new ResultMsg();
            //補(bǔ)全戶主名稱
            population.setHouseHolder(person.getName());
            //存戶口信息
            int count=populationMapper.insert(population);
            //模擬產(chǎn)生異常,看是否回滾
            int i=0;
            int y=2/i;
            if(count>0){
                //戶口存儲成功屈嗤,獲取戶號
                String popid=population.getId();
                //設(shè)置人員戶號
                person.setPopulationId(popid);
                int count2=personMapper.insert(person);
                
                if(count2>0){
                    rm=new ResultMsg(0,"成功");
                    
                }else{
                    rm=new ResultMsg(-1,"人員信息失敗");
                }
            }else{
                rm=new ResultMsg(-1,"戶口信息存儲失敗");
            }
            
            
            return rm;
        }
    
    }

事務(wù)的傳播行為

事務(wù)傳播行為
@Transactional 注解中的 propagation 屬性潘拨,可以設(shè)置事務(wù)傳播行為。屬性值為:

  1. REQUIRED:如果當(dāng)前沒有事務(wù)饶号,就新建一個事務(wù)铁追,如果已經(jīng)存在一個事務(wù)中,就加入到這個事務(wù)中茫船。這是最常見的選擇琅束。

  2. SUPPORTS:支持當(dāng)前事務(wù),如果當(dāng)前沒有事務(wù)算谈,就以非事務(wù)方式執(zhí)行狰闪。

  3. MANDATORY:使用當(dāng)前的事務(wù),如果當(dāng)前沒有事務(wù)濒生,就拋出異常埋泵。

  4. REQUIRES_NEW:新建事務(wù),如果當(dāng)前存在事務(wù)罪治,把當(dāng)前事務(wù)掛起丽声。

  5. NOT_SUPPORTED:以非事務(wù)方式執(zhí)行操作,如果存在事務(wù)觉义,就把當(dāng)前事務(wù)掛起雁社。

  6. NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù)晒骇,則拋出異常霉撵。

  7. NESTED:嵌套事務(wù)執(zhí)行磺浙,如果沒有事務(wù)就按REQUIRED來執(zhí)行,也就是新建一個事務(wù)
    它能讓事務(wù)部分回滾

    @Transactional(propagation=Propagation.REQUIRED)
    public ResultMsg save(Person person, Population population) {
    .......
    }

1徒坡、用NESTED
https://www.cnblogs.com/yifanSJ/p/16330741.html

事務(wù)A 中包含B事務(wù)(批量插入時(事物A) 會調(diào)用單個插入操作(事務(wù)b)),
如果B失敗了撕氧,只會回滾B,a會被提交
a->執(zhí)行B之前設(shè)置了savepoint
2喇完、如果用REQUIRED,如果B失敗了伦泥,ab都回滾

事務(wù)的隔離性

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锦溪,隨后出現(xiàn)的幾起案子不脯,更是在濱河造成了極大的恐慌,老刑警劉巖刻诊,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件防楷,死亡現(xiàn)場離奇詭異,居然都是意外死亡则涯,警方通過查閱死者的電腦和手機(jī)域帐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是整,“玉大人,你說我怎么就攤上這事民假「∪耄” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵羊异,是天一觀的道長事秀。 經(jīng)常有香客問我,道長野舶,這世上最難降的妖魔是什么易迹? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮平道,結(jié)果婚禮上睹欲,老公的妹妹穿的比我還像新娘。我一直安慰自己一屋,他們只是感情好窘疮,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著冀墨,像睡著了一般闸衫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上诽嘉,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天蔚出,我揣著相機(jī)與錄音弟翘,去河邊找鬼。 笑死骄酗,一個胖子當(dāng)著我的面吹牛稀余,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酥筝,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼滚躯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘿歌?” 一聲冷哼從身側(cè)響起掸掏,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宙帝,沒想到半個月后丧凤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡步脓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年愿待,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靴患。...
    茶點(diǎn)故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡仍侥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出鸳君,到底是詐尸還是另有隱情农渊,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布或颊,位于F島的核電站砸紊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏囱挑。R本人自食惡果不足惜醉顽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望平挑。 院中可真熱鬧游添,春花似錦、人聲如沸通熄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棠隐。三九已至石抡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間助泽,已是汗流浹背啰扛。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工嚎京, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人隐解。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓鞍帝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煞茫。 傳聞我的和親對象是個殘疾皇子帕涌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容