999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Spring 3.x的事務(wù)處理機(jī)制的研究比較

2012-05-12 02:47:36丁振凡
關(guān)鍵詞:方法

丁振凡

(華東交通大學(xué) 信息工程學(xué)院,江西 南昌 330013)

事務(wù)是訪問(wèn)數(shù)據(jù)庫(kù)的一個(gè)基本單位,通常用一個(gè)操作序列表示。事務(wù)ACID特性,即原子性、一致性、獨(dú)立性和持久性。一個(gè)事務(wù)處理包括一系列操作,并把它們當(dāng)做整體失敗或成功的單個(gè)操作對(duì)待。傳統(tǒng)JDBC的Connection類中含有幾個(gè)方法實(shí)現(xiàn)對(duì)事務(wù)的處理支持,setAutoCommit方法設(shè)置事務(wù)是否自動(dòng)提交,commit方法進(jìn)行事務(wù)提交,rollback方法實(shí)現(xiàn)事務(wù)回滾。傳統(tǒng)的JDBC事務(wù)編程將程序代碼與事務(wù)操作代碼耦合在一起。而Spring面向的是各種數(shù)據(jù)訪問(wèn)方式,包括 JDBC、Hibernate、JTA、JTS等。因此,需要一個(gè)統(tǒng)一的策略。

Spring是一個(gè)以控制倒轉(zhuǎn)(IoC)原則和面向方面編程思想(AOP)為基礎(chǔ)的輕量級(jí)框架。Spring因其優(yōu)良的性能、強(qiáng)大的功能吸引了眾多應(yīng)用開(kāi)發(fā)者的興趣。Spring提供的事務(wù)管理可以分為編程式和聲明式兩類[1]。根據(jù)事務(wù)涉及范圍,可將事務(wù)分為基于JTA的全局事務(wù)和針對(duì)具體數(shù)據(jù)庫(kù)操作的局部事務(wù)。而在具體數(shù)據(jù)庫(kù)操作方式上,Spring既實(shí)現(xiàn)了基于JDBC的事務(wù)處理,又實(shí)現(xiàn)了基于Hibernate的事務(wù)處理。本文以JDBC事務(wù)為樣例進(jìn)行介紹。

1 Spring的編程式事務(wù)處理

Spring提供了幾個(gè)關(guān)于事務(wù)處理的接口,在編程時(shí)常用。它們是:

(1)TransactionDefinition:定義事務(wù)屬性的接口;

(2)TransactionStatus:定義事務(wù)管理狀態(tài)的接口;

(3)PlatformTransactionManager:用于管理事務(wù)的基礎(chǔ)接口。

Spring的事務(wù)管理是一種典型的策略模式,Platform-TransactionManager代表事務(wù)管理接口,但它不知道底層如何管理事務(wù),只要求管理者提供開(kāi)始事務(wù)(getTransaction)、提交事務(wù)(commit)和回滾事務(wù)(rollback)三個(gè)方法,具體實(shí)現(xiàn)交給實(shí)現(xiàn)類完成。JDBC事務(wù)的具體實(shí)現(xiàn)類是DataSourceTransactionManager。

編程式事務(wù)可分為兩種實(shí)現(xiàn)方式,一種是由TransactionTemplate進(jìn)行事務(wù)管理,另一種是由JdbcTemplate進(jìn)行事務(wù)管理。程序中用到的事務(wù)管理器可通過(guò)配置注入。例如:

1.1 由TransactionTemplate進(jìn)行事務(wù)處理

Spring的TransactionTemplate在編程中可省去事務(wù)提交、回滾代碼。只需將訪問(wèn)數(shù)據(jù)庫(kù)的操作代碼安排在TransactionTemplate的處理框架內(nèi),Spring將自動(dòng)進(jìn)行commit和 rollback處理。TransactionTemplate是采用回調(diào)機(jī)制實(shí)現(xiàn)方法調(diào)用。

具體實(shí)現(xiàn)的核心代碼如下,代碼中的事務(wù)管理器通過(guò)配置注入。

1.2 由JdbcTemplate的執(zhí)行結(jié)果決定事務(wù)提交和回滾

為簡(jiǎn)化對(duì)JDBC數(shù)據(jù)源的訪問(wèn)處理,Spring提供了JdbcTemplate類。基于JdbcTemplate的事務(wù)處理與傳統(tǒng)的JDBC事務(wù)非常類似,它根據(jù)程序執(zhí)行SQL是否出現(xiàn)異常決定事務(wù)是提交還是回滾。具體實(shí)現(xiàn)框架如下:

2 Spring聲明式事務(wù)處理

Spring聲明式事務(wù)處理使用了IoC和AOP思想,因此,需要將相關(guān)的JAR包加入到類路徑中。聲明式事務(wù)處理不需要在具體業(yè)務(wù)邏輯中加入任何事務(wù)處理代碼。它是通過(guò)在配置文件中用屬性設(shè)置來(lái)聲明業(yè)務(wù)邏輯中的哪些操作需要進(jìn)行事務(wù)處理[2]。

后續(xù)配置中數(shù)據(jù)源、事務(wù)管理器、userDAO的定義和前面的相同,為節(jié)省篇幅予以省略。以下分別討論聲明式事務(wù)的幾種實(shí)現(xiàn)方式。

2.1 用事務(wù)攔截器進(jìn)行事務(wù)管理

Spring的事務(wù)攔截器(TransactionInterceptor)通過(guò)對(duì)方法執(zhí)行的攔截加入事務(wù)管理。TransactionInterceptor類有兩個(gè)主要的屬性:transactionManager屬性實(shí)現(xiàn)與事務(wù)管理器的關(guān)聯(lián);transactionAttributes屬性用來(lái)定義事務(wù)規(guī)則。

說(shuō)明:上面配置指明對(duì)于ecjtu.UserDao類的 insertUsers方法使用PROPAGATION_REQUIRED的事務(wù)傳播規(guī)則進(jìn)行事務(wù)處理。該傳播特性的意思是,如果執(zhí)行方法前已在事務(wù)中,則利用該事務(wù),否則創(chuàng)建一個(gè)新事務(wù)來(lái)執(zhí)行方法。

2.2 用TransactionProxyFactoryBean進(jìn)行事務(wù)管理

TransactionProxyFactoryBean創(chuàng)建了一個(gè)JDK代理,該代理會(huì)攔截目標(biāo)對(duì)象的方法調(diào)用。對(duì)于名字出現(xiàn)在transactionAttributes屬性的key中的任何方法,代理會(huì)使用指定的傳播方式來(lái)開(kāi)啟一個(gè)事務(wù)。以下為配置舉例。

表1 幾種事務(wù)方式的比較

該配置方式的明顯缺點(diǎn)是要為每個(gè)有事務(wù)處理要求的bean配置一個(gè)代理bean,這樣配置文件的內(nèi)容增加非常快。

2.3 使用@Transactional注解

Spring還提供了@Transactional全注解的事務(wù)配置,它具有功能強(qiáng)大、簡(jiǎn)單明了的特點(diǎn)。@Transactional注解可修飾類,也可修飾方法。修飾類表示對(duì)整個(gè)類起作用;修飾方法則僅對(duì)方法起作用[3]。

例如,以下代碼在insertUsers方法上加上@Transactional注解,則該方法在執(zhí)行過(guò)程中將自動(dòng)進(jìn)行事務(wù)處理。

2.3.1相關(guān)配置

要讓Spring啟用對(duì)annotation的支持,在beans.xml配置文件中要有如下行:

<context:annotation-config/>

為了讓Spring根據(jù)Annotation來(lái)配置事務(wù)代理,還需要指定事務(wù)管理器。

<tx:annotation-driven transaction-manager="myTransactionManager"/>

2.3.2使用@Transactional的幾點(diǎn)注意

(1)聲明式事務(wù)配置后,相關(guān)Bean將建立事務(wù)代理。所以從系統(tǒng)環(huán)境獲取Bean和訪問(wèn)Bean均要通過(guò)接口,不要通過(guò)具體實(shí)現(xiàn)類來(lái)獲取Bean。

(2)@Transactional只能被應(yīng)用到public方法上,實(shí)際接口中的方法均為public,除非不屬于接口的方法。

(3)默認(rèn)情況下,一個(gè)有事務(wù)的方法,遇到 Runtime-Exception時(shí)會(huì)回滾,遇到受檢查的異常是不會(huì)回滾的。要想所有異常都回滾,要加上rollbackFor屬性來(lái)指定。例如:

@Transactional(rollbackFor=Exception.class)

3 幾種事務(wù)管理的測(cè)試對(duì)比

以下對(duì)幾種事務(wù)處理方法進(jìn)行測(cè)試對(duì)比,參見(jiàn)表1。實(shí)驗(yàn)選擇批量插入30個(gè)學(xué)生,分別對(duì)正常插入操作完成和出現(xiàn)異常導(dǎo)致回滾所花費(fèi)時(shí)間代價(jià)進(jìn)行測(cè)試。測(cè)試結(jié)果表明,在聲明式事務(wù)處理中,使用Spring的事務(wù)注解方式執(zhí)行效率高,而在編程式事務(wù)處理中,基于JDBC模板執(zhí)行結(jié)果進(jìn)行事務(wù)處理執(zhí)行效率也較好,但編程稍復(fù)雜。

Spring提供了多樣化的事務(wù)編程支持,包括編程式事務(wù)和聲明式事務(wù)。任何事務(wù)處理方式都需要有事務(wù)管理器的支持。Spring的編程式事務(wù)適合對(duì)局部操作進(jìn)行事務(wù)處理。如果應(yīng)用系統(tǒng)中有大量的事務(wù)需要處理,則應(yīng)該使用聲明式事務(wù)處理。聲明式事務(wù)處理實(shí)現(xiàn)了事務(wù)處理與業(yè)務(wù)邏輯的分離,聲明式事務(wù)處理依賴Spring AOP的功能。在3種聲明式處理中,用TransactionProxy-FactoryBean實(shí)現(xiàn)的事務(wù)處理,需要為涉及事務(wù)處理的每個(gè)Bean設(shè)置一個(gè)代理,配置量大。用事務(wù)攔截器方式執(zhí)行效率不夠理想。而基于@Transactional注解的事務(wù)定義方法具有配置簡(jiǎn)單、編程和執(zhí)行效率高的特點(diǎn),是值得推薦的方式。

[1]李濤,張波,張曉鵬,等.Spring框架的事務(wù)管理應(yīng)用分析[J].計(jì)算機(jī)與信息技術(shù),2006(7):8-9.

[2]李剛.輕量級(jí)Java EE企業(yè)應(yīng)用實(shí)踐(第 3版)-Struts2+Spring3+Hibernate整合開(kāi)發(fā)[M].北京:北京電子工業(yè)出版社,2011.

[3]劉榮輝.基于Annotation的 Spring事務(wù)應(yīng)用設(shè)計(jì)[J].微型電腦應(yīng)用,2009,25(7):57-59.

猜你喜歡
方法
中醫(yī)特有的急救方法
中老年保健(2021年9期)2021-08-24 03:52:04
高中數(shù)學(xué)教學(xué)改革的方法
化學(xué)反應(yīng)多變幻 “虛擬”方法幫大忙
變快的方法
兒童繪本(2020年5期)2020-04-07 17:46:30
學(xué)習(xí)方法
用對(duì)方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
最有效的簡(jiǎn)單方法
山東青年(2016年1期)2016-02-28 14:25:23
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢(qián)方法
捕魚(yú)
主站蜘蛛池模板: 99精品热视频这里只有精品7| 久久99久久无码毛片一区二区 | 亚洲天堂免费在线视频| 亚洲av无码成人专区| 91精品最新国内在线播放| swag国产精品| 伊人婷婷色香五月综合缴缴情 | 亚洲福利网址| 免费高清毛片| 国产天天色| 欧美国产日韩一区二区三区精品影视| 欧美成人亚洲综合精品欧美激情| 国产美女在线免费观看| 国产精品免费入口视频| 亚洲综合18p| 国产女人爽到高潮的免费视频| 国内精品久久久久鸭| 四虎国产精品永久在线网址| 欧美成人一级| 免费精品一区二区h| 波多野结衣亚洲一区| 日韩免费中文字幕| 日本AⅤ精品一区二区三区日| 国产精品视频猛进猛出| 男人天堂伊人网| 狠狠五月天中文字幕| 伊人色天堂| 久久五月天综合| 亚洲女人在线| 免费国产黄线在线观看| 久久久久久高潮白浆| 噜噜噜综合亚洲| 91无码视频在线观看| 性喷潮久久久久久久久| 欧美不卡视频在线观看| 日本免费新一区视频| 在线一级毛片| 国产成人盗摄精品| 国产综合精品日本亚洲777| 国产精品成人第一区| vvvv98国产成人综合青青| 免费毛片在线| 亚洲三级色| 青青青国产视频手机| 亚洲AV无码乱码在线观看裸奔| 久久亚洲AⅤ无码精品午夜麻豆| 国产麻豆永久视频| 91成人在线观看| 欧美一区二区啪啪| 好久久免费视频高清| 高清国产在线| 成人国产精品一级毛片天堂| 伊人国产无码高清视频| 亚洲国产精品一区二区第一页免 | 成人免费黄色小视频| av在线无码浏览| 久久不卡精品| 91成人在线观看视频| 久久无码高潮喷水| 麻豆国产在线观看一区二区 | 国产一区免费在线观看| 九九热视频精品在线| 中文字幕乱妇无码AV在线| 国产欧美综合在线观看第七页| 日本一本在线视频| 国产第二十一页| 国产网友愉拍精品| 第一页亚洲| 伊人久久久久久久久久| 成人噜噜噜视频在线观看| 精品無碼一區在線觀看 | 永久在线精品免费视频观看| 国产一级一级毛片永久| 亚洲综合九九| 日韩欧美国产中文| 91精品国产自产在线老师啪l| 色综合激情网| 久草热视频在线| 国内丰满少妇猛烈精品播| 中文字幕亚洲乱码熟女1区2区| 国产日韩欧美中文| 东京热高清无码精品|