## 注解方式
1. 需要申請配置事物管理 (在spring beans配置文件中)
```
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
```
2. 啟用事務注解(在spring beans配置文件中)
```
<tx:annotation-driven transaction-manager="transactionManager"/>
```
3. 在需要開啟事物的方法上添加注解 `@Transactional`
>### Transactional屬性
- **PROPAGATION**設置事物的傳播行為
當一個事務方法,調用另外一個事務方法的時候。
**需要在被調用的事物是使用PROPAGATION屬性**。
(常用的兩個`PROPAGATION_REQUIRED`,`PROPAGATION_REQUIRES_NEW`)
1. REQUIRED--支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
2. REQUIRES_NEW--新建事務,如果當前存在事務,把當前事務掛起。
3. SUPPORTS--支持當前事務,如果當前沒有事務,就以非事務方式執行。
4. MANDATORY--支持當前事務,如果當前沒有事務,就拋出異常。
NOT_SUPPORTED--以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
5. NEVER--以非事務方式執行,如果當前存在事務,則拋出異常。
6. NESTED-- 如果有事務在運行,當前的方法就應該在這個事務的嵌套事務內運行,否則就啟動一個新的事務,并在它自己的事務內運行。
- `isolation`設置事務的隔離級別 `isolation=Isolation.READ_COMMITTED`最常用
- 默認spring聲明式事務對所有異常回滾,也可以去做設置,但是一般不做。
- 只讀事務,表示這個事務只讀取數據但不更新數據,這樣可以幫助數據庫引擎優化事務。
使用`readOnly `指定事務是否為只讀,由于事務可以在行和表上獲得鎖,因此長事務會占用資源,對整體性能產生影響。
如果一個事務只讀取數據,但是不做修改,數據庫引擎可以對這個事務進行優化。
- 超時事務屬性,事務在強制回滾之前可以保持多久,這樣可以防止長期運行的事務占用資源。`timeout `秒。
## XML文件配置方式(與AOP配合使用)
1. 配置事務管理器(同注解方式)
2. 配置事務屬性
```
<!-- 配置事務屬性。 -->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<!-- 事務屬性 -->
<tx:attributes>
<!-- name屬性可以對應具體的方法名稱 。然后配置事務具體的屬性,傳播行為,propagation 以及isolation等。。。 -->
<tx:method name="exchangeGoods" propagation="REQUIRES_NEW"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="*"/>
<!-- *匹配所有方法,exchangeGoods給特定方法添加事務。get find開頭的方法添加事務。 -->
</tx:attributes>
</tx:advice>
3. 配置事務切入點
```
<!-- 將配置好的事務屬性添加到指定方法 。使用springAOP切點表達式進行配置。 -->
<aop:config>
<aop:pointcut expression="execution(* com.yuan.spring.service.*.*(..))" id="txpointcut"/>
<!-- 合并事務跟切點 -->
<aop:advisor advice-ref="txadvice" pointcut-ref="txpointcut"/>
</aop:config>
- 第一章 java SE
- 1.1數據類型
- 1.2 流程控制語句
- 1.3 方法
- 1.4 面向對象三特性
- 1.5 對象數組與集合
- 1.6 數組和集合操作工具類
- 1.7 可變參數
- 1.8 String
- 1.9 StringBuilder
- 1.10 final&&finally&&finalize
- 1.11 抽象類與接口
- 1.12 基本數據類型的包裝類
- 1.13 泛型
- 1.14 內部類
- 1.15 throw & throws & try catch
- 1.16 線程
- 1.17 BeanUtils
- 1.18 java反射
- 1.19 序列化和反序列化
- 1.20 IO輸入輸出流
- 1.21 File
- 1.22 RandomAccessFile
- 1.23 第三方工具CommonsIO
- 1.24 java網絡傳輸
- 第二章 java EE
- 2.1 maven的配置
- 2.2 Cookie
- 2.3 EL表達式 JSTL
- 2.4 驗證相關
- 2.4.1 驗證碼
- 2.5 防重復提交
- 2.6 activeMq的使用
- 2.7 jtl的使用
- 2.8 Upload上傳文件
- 第三章 Spring相關
- 3.1 IOC/DI
- bean的生命周期
- bean的配置
- 3.2 Spring Aop
- 3.3 Spring Jdbc
- 3.4 事物相關
- 事物
- 事物的使用
- 3.5 MBG使用
- 第四章 解決問題方法
- 4.1 List轉換為Map
- 4.2 結果返回類
- 4.3 HSSF的使用
- 第五章 排序
- 5.1 冒泡排序
- 5.2 選擇排序
- 5.3 快速排序