欧美三区_成人在线免费观看视频_欧美极品少妇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條評論
主站蜘蛛池模板: 东方亚洲东方欧美色二区 | 国产成人+综合亚洲+天堂 | 中国女警察一级毛片视频 | 日本无卡无吗在线 | 久久天堂 | 欧美日韩亚洲高清不卡一区二区三区 | 中文字幕精品视频 | 欧美一区二区 | 日韩手机专区 | 亚洲免费在线观看 | 欧美日本中文字幕 | 国内精品易阳在线播放国产 | 日本黄色片一级片 | 国产精品久久久久久久久久久搜索 | 欧洲免费无线码二区5 | 2020国产精品视频免费 | 色插综合 | 午夜爱爱爱爱爽爽爽网站免费 | 国产一级毛片高清视频完整版 | 亚洲ci网| 91久久亚洲国产成人精品性色 | 亚洲国产欧美在线 | 黄在线 | 日韩福利在线观看 | 久久综合亚洲色综合 | 欧美综合久久 | 精品日韩欧美国产一区二区 | 国产成人福利在线视老湿机 | 亚洲精品麻豆 | 国产精品久久久久久久久久久久 | 99久久国产综合精品网成人影院 | 亚洲欧美天堂综合久久 | 亚洲精品亚洲人成人网 | 91精品国产91久久久 | 色色成人网 | 久久国内精品视频 | 欧美精品导航 | 韩日精品视频 | 91看片淫黄大片欧美看国产片 | www.久草 | 国产高清性xxxxxxxx |