SSM框架事務(wù)回滾失效

使用SSM框架進(jìn)行項(xiàng)目開(kāi)發(fā)時(shí),經(jīng)常因?yàn)榕渲玫膯?wèn)題瓢剿,可能會(huì)遇到一些稀奇古怪的問(wèn)題,比如說(shuō):明明已經(jīng)配置了事務(wù)管理泳姐,并且也在需要進(jìn)行事務(wù)控制的方法上添加了@Transactional注解度苔,服務(wù)也基本能夠正常啟動(dòng)和使用匆篓,但是當(dāng)事務(wù)控制的方法中出錯(cuò)時(shí),之前執(zhí)行的修改數(shù)據(jù)庫(kù)的操作寇窑,沒(méi)有被回滾鸦概。

另外事務(wù)控制失效的另一個(gè)明顯表現(xiàn)就是任何一個(gè)改變數(shù)據(jù)庫(kù)數(shù)據(jù)的操作,都會(huì)直接被提交疗认,即操作一經(jīng)執(zhí)行完残,就可以立馬在數(shù)據(jù)庫(kù)中得以體現(xiàn)。

事務(wù)控制未生效的配置横漏。

springmvc配置文件指定掃包路徑

<context:component-scan base-package="com.alex">   #錯(cuò)誤配置方式

spirng-mybatis配置文件

# 沒(méi)有引入掃包規(guī)則

<!-- 引入數(shù)據(jù)庫(kù)配置文件 -->
    <bean id="propertyConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>

    <!-- 數(shù)據(jù)庫(kù)配置 -->
    <bean id="dataSource" class="com.alex.common.tools.DBConnection"
        destroy-method="close">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${username}" />
        <property name="password" value="${password}" />
        <!-- 初始化連接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 連接池最大數(shù)量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 連接池最大空閑 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 連接池最小空閑 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 獲取連接最大等待時(shí)間 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>

    <!-- spring和MyBatis完美整合谨设,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <!--引入mybatis-config.xml-->
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!-- 自動(dòng)掃描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath*:com/alex/ai/nlpc/mapper/*/*.xml"></property>
    </bean>

    <!-- DAO接口所在包名,Spring會(huì)自動(dòng)查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--basePackage指定要掃描的包缎浇,在此包之下的映射器都會(huì)被搜索到扎拣。 可指定多個(gè)包,包與包之間用逗號(hào)或分號(hào)分隔 -->
        <property name="basePackage" value="com.alex.ai.nlpc.dao" />
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>

    <!-- (事務(wù)管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 配置基于注解的申明式事務(wù) -->
    <tx:annotation-driven transaction-manager="transactionManager"/>

問(wèn)題分析

其實(shí)這并不是我們事務(wù)配置的問(wèn)題素跺,而是我們定義<context:component-scan base-package="包路徑">掃包規(guī)則的問(wèn)題二蓝,在spirngmvc配置文件中,我們掃描了所有的ben文件指厌,但是我們是使用spring進(jìn)行事務(wù)管理的刊愚。但是我們的spring-mybatis配置文件中并沒(méi)有配置掃包規(guī)則。

配置文件不同踩验,管理域也是不一樣的鸥诽,在springmvc配置了掃描所有bean文件,雖然其中包含了springmvc管理的箕憾,也包含了spring管理的牡借,但是我們的spring-mybatis文件中并沒(méi)有掃描和管理spring的配置,所以袭异,spring-mybatis配置文件并不能訪問(wèn)到springmvc中的spring管理钠龙。因此,即使配置了事務(wù)注解,也不會(huì)被spring管理碴里,從而造成了出錯(cuò)了也不會(huì)對(duì)事務(wù)進(jìn)行回滾沈矿。

問(wèn)題處理

修改方式,讓springmvc配置文件只掃描controller目錄并闲,并在spring-mybatis文件中细睡,添加掃描和管理spring的配置帝火。
修改后:
springmvc配置
<context:component-scan base-package="com.alex.controller">

spring-mybatis配置文件中添加
<context:component-scan base-package="com.alex.service">
因?yàn)槲覀兺ǔ6际窃趕ervice層進(jìn)行數(shù)據(jù)庫(kù)的操作和控制事務(wù),如果不是在service層進(jìn)行處理湃缎,只需要將package路徑修改到需要使用事務(wù)的包的路徑即可。

親測(cè)嗓违,重啟運(yùn)行后九巡,事務(wù)控制的方法中出錯(cuò)后蹂季,事務(wù)正趁峁悖回滾!

如果一個(gè)方法添加了事務(wù)控制偿洁,那么這個(gè)方法中的任何SQL操作撒汉,都不會(huì)立馬對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行修改,而是當(dāng)這個(gè)方法執(zhí)行結(jié)束之后涕滋,這些對(duì)數(shù)據(jù)庫(kù)修改的操作才會(huì)被提交睬辐。因此我們判斷事務(wù)是否生效宾肺,并不需要執(zhí)行到有錯(cuò)誤出現(xiàn)溯饵,只需要觀察事務(wù)控制方法內(nèi)的一個(gè)SQL執(zhí)行之后锨用,數(shù)據(jù)庫(kù)數(shù)據(jù)是否立馬發(fā)生了改變丰刊,改變了即說(shuō)明事務(wù)控制沒(méi)有生效,反之即表示事務(wù)控制生效了增拥!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末啄巧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子跪者,更是在濱河造成了極大的恐慌棵帽,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件渣玲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡忘衍,警方通過(guò)查閱死者的電腦和手機(jī)逾苫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铅搓,“玉大人,你說(shuō)我怎么就攤上這事星掰《嗤” “怎么了氢烘?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵怀偷,是天一觀的道長(zhǎng)播玖。 經(jīng)常有香客問(wèn)我椎工,道長(zhǎng),這世上最難降的妖魔是什么维蒙? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮果覆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘随静。我一直安慰自己,他們只是感情好燎猛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布恋捆。 她就那樣靜靜地躺著重绷,像睡著了一般沸停。 火紅的嫁衣襯著肌膚如雪昭卓。 梳的紋絲不亂的頭發(fā)上愤钾,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天候醒,我揣著相機(jī)與錄音能颁,去河邊找鬼倒淫。 笑死伙菊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镜硕。 我是一名探鬼主播运翼,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼兴枯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼血淌!你這毒婦竟也來(lái)了财剖?” 一聲冷哼從身側(cè)響起悠夯,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峰伙,沒(méi)想到半個(gè)月后疗疟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瞳氓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年栓袖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匣摘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裹刮。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡音榜,死狀恐怖捧弃,靈堂內(nèi)的尸體忽然破棺而出赠叼,到底是詐尸還是另有隱情违霞,我是刑警寧澤嘴办,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布买鸽,位于F島的核電站涧郊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妆艘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一批旺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诵姜,春花似錦、人聲如沸逗物。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至失暴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逗扒,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工矩肩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人叉袍。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓刽酱,卻偏偏與公主長(zhǎng)得像喳逛,于是被迫代替她去往敵國(guó)和親棵里。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • SSM框架整合 SSM(Spring+SpringMVC+MyBatis)框架集由Spring典蝌、MyBatis兩個(gè)...
    浩云0919閱讀 1,052評(píng)論 0 1
  • SSM框架整合理解 把IntelliJ IDEA+Maven+Spring + SpringMVC + MyBat...
    青年馬土豆閱讀 9,410評(píng)論 0 21
  • 對(duì)于java中的思考的方向稳捆,1必須要看前端的頁(yè)面,對(duì)于前端的頁(yè)面基本的邏輯乔夯,如果能理解最好,不理解也要知道幾點(diǎn)末荐。 ...
    神尤魯?shù)婪?/span>閱讀 812評(píng)論 0 0
  • 1. 簡(jiǎn)介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL眶熬、存儲(chǔ)過(guò)程以及高級(jí)映射的優(yōu)秀的...
    笨鳥(niǎo)慢飛閱讀 5,510評(píng)論 0 4
  • 晴;今挑戰(zhàn)200字以上 生活把我們磨圓娜氏,磨沒(méi)脾氣,磨呆木...... 每天起來(lái)都不想來(lái)店里 沒(méi)客人贸弥;如今開(kāi)個(gè)張都是...
    維摩行止閱讀 75評(píng)論 0 1