事務有四個特性:ACIDjava
- 原子性(Atomicity):事務是一個原子操做,由一系列動做組成。事務的原子性確保動做要麼所有完成,要麼徹底不起做用。
- 一致性(Consistency):一旦事務完成(無論成功仍是失敗),系統必須確保它所建模的業務處於一致的狀態,而不會是部分完成部分失敗。在現實中的數據不該該被破壞。
- 隔離性(Isolation):可能有許多事務會同時處理相同的數據,所以每一個事務都應該與其餘事務隔離開來,防止數據損壞。
- 持久性(Durability):一旦事務完成,不管發生什麼系統錯誤,它的結果都不該該受到影響,這樣就能從任何系統崩潰中恢復過來。一般狀況下,事務的結果被寫到持久化存儲器中。
事務:要麼一塊兒成功,要麼一塊兒失敗。spring
Spring並不直接管理事務,而是提供了多種事務管理器,他們將事務管理的職責委託給Hibernate或者JTA等持久化機制所提供的相關平臺框架的事務來實現。 Spring事務管理器的接口是org.springframework.transaction.PlatformTransactionManager,經過這個接口,Spring爲各個平臺如JDBC、Hibernate等都提供了對應的事務管理器,可是具體的實現就是各個平臺本身的事情了。sql
若是應用程序中直接使用JDBC來進行持久化,DataSourceTransactionManager會爲你處理事務邊界。爲了使DataSourceTransactionManager,你須要使用以下的XML將其裝配到應用程序的上下文定義中:express
1.配置事務管理器。 框架
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
實際上,DataSourceTransactionManager是經過調用java.sql.Connection來管理事務,然後者是經過DataSource獲取到的。經過調用鏈接的commit()方法來提交事務,一樣,事務失敗則經過調用rollback()方法進行回滾。spa
2.配置事務通知屬性orm
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="enable*" propagation="REQUIRED" /> <tx:method name="disable*" propagation="REQUIRED" /> <tx:method name="get*" propagation="REQUIRED" read-only="true" /> <tx:method name="count*" propagation="REQUIRED" read-only="true" /> ... </tx:attributes> </tx:advice>
三、配置事務切面 接口
<aop:config expose-proxy="true"> <aop:pointcut id="pointcut_1" expression="execution(* com.aaaaa.fffff.sssss..*.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut_1" /> </aop:config>