亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Spring聲明式事務之MathAlwaysTransactionAttti

系統 1890 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實例

MathAlwaysTransactionAtttirbuteSource是最簡單的TransactionAttributeSource實現,他總是簡單的返回相同的TransactionAttribute,而不管這個事務中包含了那些方法(默認是PROPAGATION_REQUIRED和ISOLATION_DEFAULT),具體配置文件如下:

?

< 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.MatchAlwaysTransactionAttributeSource" />
????
????
< 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.MatchAlwaysTransactionAttributeSource" >
???
< property? name ="transactionAttribute" >
??????
< ref? bean ="myTransactionAttribute" />
???
</ property >
?
</ bean >
?
< bean? id ="myTransactionAttribute" ?class ="org.springframework.transaction.interceptor.DefaultTransactionAttribute" >
???
< property? name ="propagationBehaviorName" >
?????
< value > PROPAGATION_REQUIRES_NEW </ value >
???
</ property >
???
< property? name ="isolationLevelName" >
?????
< value > ISOLATION_REPEATABLE_READ </ value >
???
</ property >
?
</ bean >


Spring聲明式事務之MathAlwaysTransactionAtttirbuteSource使用


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产成人免费视频精品一区二区 | 免费一看一级毛片人 | 久久精品视频8 | 色黄网站成年女人色毛片 | 亚洲欧美日韩一区超高清 | 日韩 亚洲 中文 图片 小说 | 国产aaa毛片| 欧美 亚洲 中文字幕 | 成人性一级视频在线观看 | 91久久精品都在这里 | 韩国日本一级毛片免费视频 | 免费一级欧美大片在线观看 | 毛片网站免费观看 | 91日本视频| 久久99九九99九九99精品 | 国产亚洲综合精品一区二区三区 | 99久久免费国产精品 | 亚洲精品一区二区三区在 | 精品一区二区乱码久久乱码 | 女人色毛片女人色毛片中国 | 欧美视频第二页 | 免费在线观看毛片 | 精品视频999| 日韩中文字幕免费 | 日韩中文字幕精品久久 | 久久99久久99精品免观看不卡 | 成人久久久 | 91长腿女神清纯大又嫩在线 | 亚洲国产欧美精品一区二区三区 | 久久精品综合一区二区三区 | 欧美成人高清免费大片观看 | 国产高清精品自在线看 | 欧美成人h精品网站 | 亚洲国产精久久久久久久 | 欧美人与性动交α欧美精品图片 | 精品精品久久宅男的天堂 | 国产99欧美精品久久精品久久 | ova熟肉动漫在线 | 日韩亚洲一区二区三区 | 九色国产在视频线精品视频 | 快射影院|