在SSM中配置了事務(wù)控制但沒生效的問題
SSM配置了事務(wù)控制但沒生效
今天在使用ssm事務(wù)時(shí),發(fā)現(xiàn)方法報(bào)錯(cuò),事務(wù)沒有回滾,弄了半天,終于解決,下面記錄一下 ,本人是使用編程式事務(wù),即使用配置文件 的方式。
包結(jié)構(gòu),下面是springmvc.xml配置文件
spring配置文件:applicationContext.xml
首先我們明確spring進(jìn)行掃描注入時(shí),因?yàn)閟pring的context是父子容器,ContextLoaderListener監(jiān)聽器加載spring配置文件,產(chǎn)生的是父容器,mvc加載mvc的配置文件,產(chǎn)生了子容器,子容器對(duì)@Controller進(jìn)行裝配掃描時(shí),也裝配了@Service注解的實(shí)例,因?yàn)锧Contoller實(shí)例依賴@Service實(shí)例,當(dāng)子容器中有了@Service實(shí)例,我們使用B/S或C/S時(shí)對(duì)數(shù)據(jù)庫進(jìn)行操作時(shí),如果子容器中有@Service實(shí)例,則mvc優(yōu)先使用自身即子容器中的@Service實(shí)例,但是@Service注解的實(shí)例,也就是一般的事務(wù)控制層,應(yīng)該是由父容器初始化,以保證事務(wù)的增強(qiáng)處理,否則會(huì)失去事務(wù)處理能力。
因此我們要保證子容器中沒有@Service注解的實(shí)例
我的錯(cuò)誤之處
因此也就有了上面的兩個(gè)掃描,但我的springmvc.xml配置文件是有問題的,我沒有明白 context:include-filter的含義。
通俗點(diǎn)講:
context:exclude-filter
是設(shè)置黑名單。比如手機(jī)黑名單,在黑名單中的人是無法打進(jìn)電話的。context:include-filter
是設(shè)置白名單。在手機(jī)白名單中的號(hào)碼可以打進(jìn)來,不在白名單也不在黑名單中的也可以打進(jìn)來。 所以需要針對(duì)白名單過濾進(jìn)行設(shè)置,把默認(rèn)的過濾器關(guān)閉,即使用use-default-filters=“false”;然后他就僅僅掃描指定注解了。
這樣就可以了,當(dāng)然由于我的@Contoller注解的實(shí)例 都在com.djw.controller包中,我也可以如下做
SSM事務(wù)配置不起作用,不回滾的幾個(gè)原因
我是小白一枚,之前事務(wù)沒學(xué)好,所以做項(xiàng)目的時(shí)候沒怎么好好研究,現(xiàn)在項(xiàng)目快做完了,要把事務(wù)加進(jìn)去,卻老是不起效果,后來終于配(抄)好了
總結(jié)幾點(diǎn)我事務(wù)配置失敗的原因
1.@Transactional在使用這個(gè)注解的時(shí)候,我就是直接在類上面加上這個(gè)注解,后來發(fā)現(xiàn)還少了一點(diǎn)東西,應(yīng)該這樣寫@Transactional(rollbackFor = Exception.class)
2.<context:component-scan base-package="com.service" />
注解掃描component-scan放錯(cuò)了地方,之前是放在spring-mvc里面,后來看到別人的博客說是要放在spring-mybatis里面,于是我就放過去,可是還是沒用 后來發(fā)現(xiàn),原來是spring-mvc里面還有一個(gè)注解掃描component-scan,然后把這個(gè)刪了,注解完美生效
下面是基本使用的代碼
spring-mybatis:
? ? <!-- 配置事務(wù)管理器 --> ? ? <bean id="transactionManager" ? ? ? ? class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> ? ? ? ? <property name="dataSource" ref="dataSource" /> ? ? </bean> ? ?? ?<context:component-scan base-package="com.service" /> ? ? <!-- 注解方式配置事務(wù) --> ? ? <tx:annotation-driven transaction-manager="transactionManager" />
serviceImpl:
@Service @Transactional(rollbackFor = Exception.class) public class TestServiceImpl implements ITestService {? ?? ?@Override ?? ?public void del(int id) throws Exception { ?? ??? ?address.delete(aid); ?? ??? ?int i=1/0; ?? ?} }
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot錯(cuò)誤處理機(jī)制實(shí)現(xiàn)原理解析
這篇文章主要介紹了springboot錯(cuò)誤處理機(jī)制實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn)
本文主要介紹了springboot layui hutool Excel導(dǎo)入的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-03-03Java Volatile關(guān)鍵字同步機(jī)制詳解
這篇文章主要介紹了Java Volatile關(guān)鍵字同步機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04基于Java實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換工具類的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何基于Java實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換工具類,從而實(shí)現(xiàn)減少參數(shù)長(zhǎng)度的效果,文中的示例代碼講解詳細(xì),需要的可以參考一下2023-02-02SpringBoot中集成Swagger2及簡(jiǎn)單實(shí)用
使用Swagger你只需要按照它的規(guī)范去定義接口及接口相關(guān)的信息,再通過Swagger衍生出來的一系列項(xiàng)目和工具,就可以做到生成各種格式的接口文檔,以及在線接口調(diào)試頁面等等,這篇文章主要介紹了SpringBoot中集成Swagger2,需要的朋友可以參考下2023-06-06解決Lombok使用@Builder無法build父類屬性的問題
這篇文章主要介紹了解決Lombok使用@Builder無法build父類屬性的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09