您好,登錄后才能下訂單哦!
這篇文章主要講解了“springboot項(xiàng)目事務(wù)標(biāo)簽驗(yàn)證問題怎么解決”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“springboot項(xiàng)目事務(wù)標(biāo)簽驗(yàn)證問題怎么解決”吧!
springboot項(xiàng)目中配置事務(wù),以前通過標(biāo)簽用過,上個(gè)內(nèi)部項(xiàng)目,因?yàn)槭窃趧e人代碼中使用了,發(fā)現(xiàn)好像沒起作用(然后因?yàn)橛锌蚣鼙WC,就沒計(jì)較了),新啟動項(xiàng)目又用到,驗(yàn)證了下,springboot項(xiàng)目下配置兩個(gè)標(biāo)簽就可以了。
(1)其實(shí)就兩個(gè)標(biāo)簽,一個(gè)用到啟動類中(@EnableTransactionManagement),另一個(gè)就是那里需要就配置到哪里(@Transactional);
(2)方案,就隨便找了個(gè)以前的測試項(xiàng)目,一個(gè)方法中包含:保存一條數(shù)據(jù)到數(shù)據(jù)庫中和一個(gè)1除以0代碼,然后看下加不加事務(wù)標(biāo)簽有什么區(qū)別;
(1)controller類
@ResponseBody @GetMapping("/tstest") public String tstest() { this.userService.tstest(); return "SUCCESS"; }
(2)service類
public void tstest() { //保存 UserEntity userEntity = new UserEntity(); userEntity.setType(0); userEntity.setOpenid("1111"); insert(userEntity); //報(bào)錯(cuò),回滾 int i = 1/0; System.out.println(i); }
不加事務(wù)標(biāo)簽,代碼如上。
(1)先清空數(shù)據(jù)庫;
(2)執(zhí)行tstest請求;
發(fā)現(xiàn)insert代碼行執(zhí)行完,數(shù)據(jù)就存到數(shù)據(jù)庫中了。
接著執(zhí)行完成(1/0),雖然報(bào)錯(cuò)代碼報(bào)錯(cuò),但是數(shù)據(jù)庫中數(shù)據(jù)還是存在的,數(shù)據(jù)沒有回滾,沒有保持一致性。
(1)增加兩個(gè)標(biāo)簽,一個(gè)是啟動類方法上,一個(gè)是tstest方法上。
(2)首先清除數(shù)據(jù),執(zhí)行到insert處
發(fā)現(xiàn)雖然insert代碼行執(zhí)行完成了,但是這時(shí)候數(shù)據(jù)庫中并沒有數(shù)據(jù),然后執(zhí)行完,代碼報(bào)錯(cuò),數(shù)據(jù)回滾,數(shù)據(jù)庫中并沒有存入數(shù)據(jù),說明事務(wù)起到到該有的作用,數(shù)據(jù)回滾了。
感謝各位的閱讀,以上就是“springboot項(xiàng)目事務(wù)標(biāo)簽驗(yàn)證問題怎么解決”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對springboot項(xiàng)目事務(wù)標(biāo)簽驗(yàn)證問題怎么解決這一問題有了更深刻的體會,具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。