1、事務的特徵(ACID)
(1)原子性:不可分割性,操作要麼全部執行,要麼全部不執行。
(2)一致性:事務的執行使得數據庫從一種正確的狀態轉換爲另一種正確的狀態。
(3)隔離性:一個事務的執行不能干擾其他事務。
(4)持久性:事務完成後,對數據的改變是永久性的,結果會永久的保存在數據庫中。
Java事務產生的原因:程序操作sh數據可的需要,編程中,實現ACID的操作。
Java事務實現範圍:通過JDBC間接實現對數據庫的增刪改查。
2、Java事務類型
JDBC事務:用Connection對象控制,包括手動模式和自動模式。侷限在一個數據庫連接內,使用簡單。
JTA事務:與實現無關,與協議無關的API。可跨越多個數據庫和多個DAO,使用複雜。
容器的事務:應用服務器提供,大多給予JTA完成,侷限於EJB。
3、Spring事務核心接口:事務管理器、事務定義接口、事務狀態接口。
4、事務定義接口:Spring事務屬性範圍:隔離規則、傳播行爲、回滾規則、事務超時、是否只讀。
事務的讀取類型:髒讀、不可重複讀、幻讀。
髒讀:事務沒提交,提取讀取。
不可重複讀:兩次讀取到的數據不一致。
幻讀:事務不是獨立執行時,發生的一種非預期現象。
(1)事務的隔離級別:一個事務可能受其他事務影響的程度。
ISOLATION_DEFAULT: 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別.。
ISOLATION_READ_UNCOMMITTED: 這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的數據。 這種隔離級別會產生髒讀,不可重複讀和幻像讀。
ISOLATION_READ_COMMITTED: 保證一個事務修改的數據提交後才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據
ISOLATION_REPEATABLE_READ: 這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。 它除了保證一個事務不能讀取另一個事務未提交的數據外,還保證了避免下面的情況產生(不可重複讀)。
ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理爲順序執行。 除了防止髒讀,不可重複讀外,還避免了幻像讀。
(2)事務的傳播行爲:一個事務被另一個事務方法調用時,必須知道事務如何傳播。
PROPAGATION_REQUIRED:如果存在一個事務,支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
PROPAGATION_SUPPORTS:如果存在一個事務,支持當前事務,如果當前沒有事務,就以非事務方式執行。
PROPAGATION_MANDATORY:如果存在一個事務,支持當前事務,如果當前沒有事務,就拋出異常。
PROPAGATION_REQUIRES_NEW:新建事務,如果當前存在事務,把當前事務掛起。
PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。
PROPAGATION_NESTED:如果當前存在事務,則在嵌套事務內執行,如果當前沒有說事務,則執行與PROPAGATION_REQUIRED類似的操作。
(3)事務是否只讀:利用數據庫的“只讀”屬性,進行特定優化處理。
(4)事務超時:特定時間內事務沒有執行完畢,要進行回滾。
(5)事務回滾:遇到運行期異常時纔會回滾。
5、事務狀態:通過事務管理器獲取事務狀態,控制事務在回滾或提交時對應的zh狀態。
6、spring事務實現的兩種方式:編程式和聲明式
(1)編程式事務實現方式
事務管理器方式:核心類爲spring事務管理的三個接口及JDBCTemplate類。
模板事務的方式:主要工具爲jdbcTemplate類。
(2)聲明式事務管理
基於AOP的模式機制,通過對方法進行前後攔截。xml配置或註解方式實現。