## 注解方式
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 快速排序