溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在SSM中配置了事務控制但沒生效怎么解決

發(fā)布時間:2022-02-28 09:19:34 來源:億速云 閱讀:166 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“在SSM中配置了事務控制但沒生效怎么解決”,在日常操作中,相信很多人在在SSM中配置了事務控制但沒生效怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”在SSM中配置了事務控制但沒生效怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

SSM配置了事務控制但沒生效

今天在使用ssm事務時,發(fā)現(xiàn)方法報錯,事務沒有回滾,弄了半天,終于解決,下面記錄一下 ,本人是使用編程式事務,即使用配置文件 的方式。

在SSM中配置了事務控制但沒生效怎么解決

包結構,下面是springmvc.xml配置文件

在SSM中配置了事務控制但沒生效怎么解決

spring配置文件:applicationContext.xml

在SSM中配置了事務控制但沒生效怎么解決

首先我們明確spring進行掃描注入時,因為spring的context是父子容器,ContextLoaderListener監(jiān)聽器加載spring配置文件,產(chǎn)生的是父容器,mvc加載mvc的配置文件,產(chǎn)生了子容器,子容器對@Controller進行裝配掃描時,也裝配了@Service注解的實例,因為@Contoller實例依賴@Service實例,當子容器中有了@Service實例,我們使用B/S或C/S時對數(shù)據(jù)庫進行操作時,如果子容器中有@Service實例,則mvc優(yōu)先使用自身即子容器中的@Service實例,但是@Service注解的實例,也就是一般的事務控制層,應該是由父容器初始化,以保證事務的增強處理,否則會失去事務處理能力。

因此我們要保證子容器中沒有@Service注解的實例

我的錯誤之處

因此也就有了上面的兩個掃描,但我的springmvc.xml配置文件是有問題的,我沒有明白 context:include-filter的含義。

通俗點講:

  • context:exclude-filter是設置黑名單。比如手機黑名單,在黑名單中的人是無法打進電話的。

  • context:include-filter是設置白名單。在手機白名單中的號碼可以打進來,不在白名單也不在黑名單中的也可以打進來。 所以需要針對白名單過濾進行設置,把默認的過濾器關閉,即使用use-default-filters=“false”;然后他就僅僅掃描指定注解了。

在SSM中配置了事務控制但沒生效怎么解決

這樣就可以了,當然由于我的@Contoller注解的實例 都在com.djw.controller包中,我也可以如下做

在SSM中配置了事務控制但沒生效怎么解決

SSM事務配置不起作用,不回滾的幾個原因

我是小白一枚,之前事務沒學好,所以做項目的時候沒怎么好好研究,現(xiàn)在項目快做完了,要把事務加進去,卻老是不起效果,后來終于配(抄)好了

總結幾點我事務配置失敗的原因

1.@Transactional在使用這個注解的時候,我就是直接在類上面加上這個注解,后來發(fā)現(xiàn)還少了一點東西,應該這樣寫@Transactional(rollbackFor = Exception.class)

2.<context:component-scan base-package="com.service" />

注解掃描component-scan放錯了地方,之前是放在spring-mvc里面,后來看到別人的博客說是要放在spring-mybatis里面,于是我就放過去,可是還是沒用        后來發(fā)現(xiàn),原來是spring-mvc里面還有一個注解掃描component-scan,然后把這個刪了,注解完美生效

下面是基本使用的代碼

spring-mybatis:

    <!-- 配置事務管理器 -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
 
    <context:component-scan base-package="com.service" />
    <!-- 注解方式配置事務 -->
    <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;
    }
}

到此,關于“在SSM中配置了事務控制但沒生效怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

ssm
AI