日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

Spring事务配置实例

發(fā)布時(shí)間:2025/3/12 javascript 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring事务配置实例 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

事務(wù)

一個(gè)使用 MyBatis-spring?的主要原因是它允許MyBatis 參與到 Spring 的事務(wù)管理中。而 不是給 MyBatis 創(chuàng)建一個(gè)新的特定的事務(wù)管理器,MyBatis-Spring 利用了存在于Spring 中的 DataSourceTransactionManager。

一旦 Spring 的PlatformTransactionManager 配置好了,你可以在 Spring 中以你通常的做 法來(lái)配置事務(wù)。@Transactional 注解和AOP(Aspect-Oriented Program,面向切面編程,譯 者注)樣式的配置都是支持的。在事務(wù)處理期間,一個(gè)單獨(dú)的 SqlSession對(duì)象將會(huì)被創(chuàng)建 和使用。當(dāng)事務(wù)完成時(shí),這個(gè) session 會(huì)以合適的方式提交或回滾。

一旦事務(wù)創(chuàng)建之后,MyBatis-Spring將會(huì)透明的管理事務(wù)。在你的 DAO 類(lèi)中就不需要額 外的代碼了。

標(biāo)準(zhǔn)配置

要 開(kāi) 啟 Spring 的 事 務(wù) 處 理 , 在 Spring 的 XML 配 置 文 件中 簡(jiǎn) 單 創(chuàng) 建 一 個(gè) DataSourceTransactionManager 對(duì)象:

<beanid="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><propertyname="dataSource"ref="dataSource"/> </bean>指定的 DataSource 一般可以是你使用 Spring 的任意 JDBCDataSource。這包含了連接 池和通過(guò) JNDI 查找獲得的 DataSource。

要注意, 為事務(wù)管理器指定的 DataSource 必須和用來(lái)創(chuàng)建SqlSessionFactoryBean 的 是同一個(gè)數(shù)據(jù)源,否則事務(wù)管理器就無(wú)法工作了。

容器管理事務(wù)

如果你正使用一個(gè) JEE 容器而且想讓 Spring參與到容器管理事務(wù)(Container?managedtransactions,CMT,譯者注)中,那么 Spring 應(yīng)該使用 JtaTransactionManager 或它的容器指定的子類(lèi)來(lái)配置。做這件事情的最方便的方式是用 Spring 的事務(wù)命名空間:

<tx:jta-transaction-manager/>

在這種配置中,MyBatis 將會(huì)和其它由 CMT 配置的 Spring事務(wù)資源一樣。Spring 會(huì)自動(dòng) 使用任意存在的容器事務(wù),在上面附加一個(gè) SqlSession。如果沒(méi)有開(kāi)始事務(wù),或者需要基 于事務(wù)配置,Spring會(huì)開(kāi)啟一個(gè)新的容器管理事務(wù)。

注 意 , 如 果 你 想 使 用 CMT , 而 不 想 使 用 Spring 的 事 務(wù)管 理 , 你 就 必 須 配 置 SqlSessionFactoryBean 來(lái)使用基本的 MyBatis 的ManagedTransactionFactory 而不是其 它任意的 Spring 事務(wù)管理器:

<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="transactionFactory"><beanclass="org.apache.ibatis.transaction.managed.ManagedTransactionFactory"/></property> </bean>編程式事務(wù)管理

MyBatis 的 SqlSession 提供指定的方法來(lái)處理編程式的事務(wù)。 但是當(dāng)使用MyBatis-Spring 時(shí), bean 將會(huì)使用 Spring 管理的 SqlSession 或映射器來(lái)注入。 那就是說(shuō) Spring 通常是處理事務(wù)的。

你 不 能 在 Spring 管 理 的 SqlSession 上 調(diào) 用SqlSession.commit() , SqlSession.rollback() 或 SqlSession.close() 方 法 。 如 果 這 樣做 了 , 就 會(huì) 拋 出 UnsupportedOperationException 異常。注意在使用注入的映射器時(shí)不能訪問(wèn)那些方法。

無(wú)論 JDBC 連接是否設(shè)置為自動(dòng)提交, SqlSession 數(shù)據(jù)方法的執(zhí)行或在Spring 事務(wù)之外 任意調(diào)用映射器方法都將會(huì)自動(dòng)被提交。

如果你想編程式地控制事務(wù),請(qǐng)參考 Spring 手冊(cè)的 10.6 節(jié)。這段代碼展示了如何手動(dòng)使用在 10.6.2 章節(jié)描述的 PlatformTransactionManager 來(lái)處理事務(wù)。

DefaultTransactionDefinitiondef=newDefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus status= txManager.getTransaction(def); try{userMapper.insertUser(user); } catch(MyException ex){txManager.rollback(status);throwex; } txManager.commit(status);注意這段代碼展示了一個(gè)映射器,但它也能和 SqlSession 一起使用。

?

總結(jié)

以上是生活随笔為你收集整理的Spring事务配置实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。