spring對事務的管理
今天講了Spring的事務,及對hibernate的整合,對struts的整合。以后還得學習,記不住,用到再整理。
1.事務的四大特點:
atomic:要么都發生,要么都不發生。
consistent:數據應該不被破壞。
Isolated:用戶間操作不相混淆
Durable:永久保存
2.介紹spring的事務管理器
spring沒有直接管理事務,而是將管理事務的責任委
托給某個特定平臺的事務實現。
3.Hibernate事務:
<bean id="transactionManager"
class="…HibernateTransactionManager">
<property name="sessionFactory" ref="sf" />
</bean>
其中sessionFactory屬性必須和一個Hibernate的SessionFactory綁定
HibernateTransactionManager把事務管理委托給一個從Hibernate
session 中取得的net….Transaction對象。當一個事務成功完成時,
HibernateTransactionManager將調用Transaction對象的commit()
方法。類似的,當一個事務失敗時,Transaction對象的rollback()方
法將被調用。
4.事務屬性
1.隔離級別:設定事務的并發程度
臟讀:一個事務讀取了另一個事務改寫但還未
提交的數據,如果這些數據被回滾,則
讀到的數據是無效的。
不可重復讀:一個事務執行相同的查詢兩次或兩次以
上,但每次查詢結果都不同。
幻讀:一個事務讀取了幾行記錄后,另一個事務插入一
些記錄,幻讀就發生了。再后來的查詢中,第一
個事務就會發現有些原來沒有的記錄。
2.只讀 若對數據庫只進行讀操作,可設置事務只讀的屬性,使用某些優化措施。數據庫會進行優化處理。若使用hibernate作為持久化機制,聲明一個只讀事務會使hibernate的flush模式設置為FLUSH_NEVER。避免不必要的數據同步,將所有更新延遲到事務的結束。
3.事務超時 若事務在長時間的運行,會不必要的占用數據庫資源。設置超時后,會在指定的時間片回滾。將那些具有可能啟動新事務的傳播行為的方法的事務設置超時才有意義
5.CMT:容器管理事務
BMT:bean 管理事務
<tx:annocation-driven transaction-manager="hibernateTransactionManager"/>
類上加@Transactional
6.總結:
事務策略
在業務中不能加try catch ,因為Spring的環繞通知在出現異常時會回滾事務,你已捕獲,就會提交事務(任何情況下)
7.Spring整合Struts
1.web服務器啟動時,完成Spring容器的實例化。plugin|listener
2.struts中的action交給Spring容器管理。
3.基本操作
注意:在spring上下文中,作為普通bean配置action,但action的不能用id,只能用name,
因為需要struts-config.xml文件中action的path一致.
bean.xml
<bean name="/loginAction" class="..LoginAction">
<property name="xxxService" ref="xxxService" />
</bean>