欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Spring聲明式事務之NameMatchAtttirbuteSource

系統 2315 0

首先介紹下spring的事務傳播規則和隔離級別

PROPAGATION_REQUIRED 如果存在一個事務,則支持當前事務。如果沒有事務則開啟一個新的事務。

PROPAGATION_SUPPORTS 如果存在一個事務,支持當前事務。如果沒有事務,則非事務的執行。但是對于事務同步的事務管理器,PROPAGATION_SUPPORTS與不使用事務有少許不同。

PROPAGATION_MANDATORY 如果已經存在一個事務,支持當前事務。如果沒有一個活動的事務,則拋出異常。

? PROPAGATION_REQUIRES_NEW 總是開啟一個新的事務。如果一個事務已經存在,則將這個存在的事務掛起。

PROPAGATION_NOT_SUPPORTED 總是非事務地執行,并掛起任何存在的事務。

PROPAGATION_NEVER 總是非事務地執行,如果存在一個活動事務,則拋出異常

PROPAGATION_NESTED 如果一個活動的事務存在,則運行在一個嵌套的事務中. 如果沒有活動事務, 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執

PROPAGATION_NESTED 與PROPAGATION_REQUIRES_NEW的區別 :它們非常類似,都像一個嵌套事務,如果不存在一個活動的事務,都會開啟一個新的事務。使用PROPAGATION_REQUIRES_NEW時,內層事務與外層事務就像兩個獨立的事務一樣,一旦內層事務進行了提交后,外層事務不能對其進行回滾。兩個事務互不影響。兩個事務不是一個真正的嵌套事務。同時它需要JTA事務管理器的支持。
使用PROPAGATION_NESTED時,外層事務的回滾可以引起內層事務的回滾。而內層事務的異常并不會導致外層事務的回滾,它是一個真正的嵌套事務。DataSourceTransactionManager使用savepoint支持PROPAGATION_NESTED時,需要JDBC 3.0以上驅動及1.4以上的JDK版本支持。其它的JTA TrasactionManager實現可能有不同的支持方式。

PROPAGATION_REQUIRED應該是我們首先的事務傳播行為。它能夠滿足我們大多數的事務需求。

?

在TransactionDefinition接口中定義了五個不同的事務隔離級別
ISOLATION_DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.另外四個與JDBC的隔離級別相對應
ISOLATION_READ_UNCOMMITTED 這是事務最低的隔離級別,它充許別外一個事務可以看到這個事務未提交的數據。這種隔離級別會產生臟讀,不可重復讀和幻像讀。
ISOLATION_READ_COMMITTED 保證一個事務修改的數據提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據。這種事務隔離級別可以避免臟讀出現,但是可能會出現不可重復讀和幻像讀。 ISOLATION_REPEATABLE_READ 這種事務隔離級別可以防止臟讀,不可重復讀。但是可能出現幻像讀。它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重復讀)。
ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止臟讀,不可重復讀外,還避免了幻像讀。


我們使用TransactionProxyFactoryBean完成spring的事務管理,他有一個屬性是transactionAttributeSource,這個屬性被定義成為一個TransactionAttributeSource實例

我們現在的目的是讓courseService類的enrollStudentInCourse被spring進行事務控制,配置文件如下:

?

< bean? id ="dataSource" ?class ="org.springframework.jdbc.datasource.DriverManagerDataSource" >
??????
< property? name ="driverClassName" >
?????????
< value > com.sybase.jdbc3.jdbc.SybDriver </ value >
???????
</ property >
???????
< property? name ="url" >
?????????
< value > jdbc:sybase:Tds:192.168.0.10:4100/DB_CENTER?charset=eucgb &amp; jconnect_version=4
?????????
</ value >
???????
</ property >
???????
< property? name ="username" >
?????????
< value > sa </ value >
???????
</ property >
???????
< property? name ="password" >
?????????
< value ></ value >
???????
</ property >
???
</ bean >
????
< bean? id ="TransactionManager" ?class ="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
?????????
< property? name ="dataSource" >
?????????????
< ref? bean ="dataSource" />
?????????
</ property >
????
</ bean > ?
????
< bean? id ="sessionFactory"
????????class
="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
????????
< property? name ="dataSource" >
????????????
< ref? local ="dataSource" ? />
????????
</ property >
????????
< property? name ="hibernateProperties" >
????????????
< props >
????????????????
< prop? key ="hibernate.dialect" >
????????????????????org.hibernate.dialect.SybaseDialect
????????????????
</ prop >
????????????????
< prop? key ="hibernate.show_sql" > false </ prop >
????????????????
< prop? key ="hibernate.cache.use_query_cache" > true </ prop >
????????????????
< prop? key ="hibernate.cache.provider_class" >
????????????????????org.hibernate.cache.HashtableCacheProvider
????????????????
</ prop >
????????????
</ props >
????????
</ property >
????????
< property? name ="mappingResources" >
???????????
< list >
?????????????
< value > com/bjjdsy/ky/zl/domain/ZlStationTab.hbm.xml </ value >
???????????
</ list >
????????
</ property >
????
</ bean >
????
<!-- ?以下是事務配置? -->
????
????
< bean? id ="transactionAttributeSource" ?class ="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource" >
???????
< property? name ="properties" >
??????????
< props >
????????????
< prop? key ="enrollStudentInCourse" >
???????????????PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,readonly,-CourseException?
<!-- ?表示當拋出CourseException時進行回滾,用減號表示,加號表示拋出異常仍可進行提交? --> ????????
????????????
</ prop >
??????????
</ props >
???????
</ property >
????
</ bean >
????
????
< bean? id ="courseService" ?class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
??????
< property? name ="proxyInterfaces" >
????????
< value > com.test.CourseService </ value >
??????
</ property >
??????
< property? name ="target" >
????????
< value > courseServiceImpl </ value >
??????
</ property >
??????
< property? name ="transactionManager" >
????????
< ref? bean ="TransactionManager" />
??????
</ property >
??????
< property? name ="trainsactionAttributeSource" >
????????
< ref? bean ="transactionAttributeSource" />
??????
</ property >
????
</ bean >

?

我們也可以使用通配符進行操作,改動如下:

?

? < bean? id ="transactionAttributeSource" ?class ="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource" >
???????
< property? name ="properties" >
??????????
< props >
????????????
< prop? key ="enroll*" >
???????????????PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ,readonly,-CourseException?
<!-- ?表示當拋出CourseException時進行回滾,用減號表示,加號表示拋出異常仍可進行提交? --> ????????
????????????
</ prop >
??????????
</ props >
???????
</ property >
????
</ bean >

?

除此之外,我們還有一種名稱匹配事務的捷徑,這種方式不再使用trainsactionAttributeSource而使用transactionAttributes

類似如下定義Bean

?

?? < bean? id ="stationManager" ?class ="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" >
???????
< property? name ="transactionManager" >
??????????
< ref? bean ="transactionManager" ></ ref >
???????
</ property >
??????
< property? name ="target" >
??????????
< bean? class ="com.bjjdsy.ky.zl.service.StationServiceImpl" >
????????????
< property? name ="stationDAO" >
????????????????
< ref? bean ="StationDAO" />
???????????
</ property >
??????????
</ bean >
??????
</ property >
??????
< property? name ="transactionAttributes" >
????????
< props >
??????????
< prop? key ="save*" > PROPAGATION_REQUIRED </ prop >
??????????
< prop? key ="list*" > PROPAGATION_REQUIRED,readOnly </ prop >
??????????
< prop? key ="delete*" > PROPAGATION_REQUIRED </ prop >
??????????
< prop? key ="get*" > PROPAGATION_REQUIRED,readOnly </ prop >
??????????
< prop? key ="edit*" > PROPAGATION_REQUIRED </ prop >
??????????
< prop? key ="search*" > PROPAGATION_REQUIRED </ prop >
???????
</ props >
?????
</ property >
????
</ bean >


Spring聲明式事務之NameMatchAtttirbuteSource使用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 日日操视频 | 亚洲经典三级 | 男女视频免费在线观看 | 国产色 | a毛片成人免费全部播放 | 国产97人妻人人做人碰人人爽 | www伊人网 | 2022国内精品免费福利视频 | 四季久久免费一区二区三区四区 | 亚洲激情中文 | 国产专区视频 | 久久国产天堂福利天堂 | 色哟哟哟在线观看www | 在线中文字幕亚洲 | 欧美视频精品 | 黄色网z| 欧美日韩视频一区三区二区 | 久久精品国产免费观看99 | 免费看h网站 | 国产一区二区三区视频 | 天天射天天干天天插 | 国产成人精品免费 | 久草新在线 | 污视频在线网站 | 亚洲人成人| 久久精品视频日本 | 国产精品久久久久久久y | 久久精品 | 在线精品亚洲欧美日韩国产 | 成人在线一区二区三区 | 性夜影院爽黄e爽在线观看 苏晓晖个人简介军衔 | 亚洲高清在线视频 | 另类视频在线观看 | 欧美视频在线一区 | 一级片 在线播放 | avtom影院入口永久在线观看 | 在线视频h| 99激情视频 | 国产一级视频 | 欧美日本日韩aⅴ在线视频 日韩福利视频导航 | 丝袜中文字幕 |