spring事务及其隔离级别

编程式事务

声明式事务:xml(全局),注解声明


spring事务需要加入jar包:

<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.5.3</version>
</dependency>


<!-- 定义事务管理器 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 加入dataSource -->
<property name="dataSource" ref="dataSource"></property>
</bean>


<!-- 定义通知: 事务管理器的id名定义为 transactionManager , 通知中可以省略 transaction-


manager="transactionManager" -->
<tx:advice id="myAdvice" transaction-manager="transactionManager">
<!-- 定义拦截的方法 ,分别以update,add,delete开头的方法 最后一个*代表 除了上面被拦截以外的所有方法 -->
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="save*"  propagation="REQUIRES_NEW"/>
<tx:method name="delete*" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>


<aop:config>
<aop:pointcut expression="execution(*  lesson4.*..*.*.*(..))"
id="cut" />
<aop:advisor advice-ref="myAdvice" pointcut-ref="cut" />
</aop:config>


<!-- 


tx:method中设定:


1. 事务的传播属性
propagation="REQUIRED"   默认值, 方法和方法之间父子关系


REQUIRED 没有事务创建一个新事务,有事务使用当前事务  *
REQUIRED_NEW 不管父方法是否存在事务,都会新建事务    *
SUPPORTS  父方法存在事务 使用当前事务  没有事务 使用jdbc的事务(自动提交)
NOT_SUPPORTED 不管父方法是否存在事务 都使用jdbc事务
MANDATORY 必须在事务环境下运行,父方法没有事务抛出异常
No existing transaction found for transaction marked with propagation 'mandatory'
NEVER     父方法有事务抛出异常
Existing transaction found for transaction marked with propagation 'never'

2. 事务的隔离级别:isolation="DEFAULT" 
    DEFAULT  默认值 使用数据库默认的隔离级别  *
    READ UNCOMMITED: 读未提交 。可以避免第一类丢失更新。
    READ COMMITED: 读已提交。可以避免第一类丢失更新和脏读。(Oracle,SQL Server默认)
    REPEATABLE READ: 可重复读。可以避免第一类丢失更新,脏读,不可重复读,第二类丢失更新。(MySQL默认)
    SERIALIZABLE: 串行化。可以避免所有的并发问题。   在执行财务数据更新时采用。
    
3. 只读事务属性:read-only="true"


4. 超时事务属性 :timeout="-1" 一般设置为10-30之间  mysql默认10s
    
5. 设置事务回滚属性:spring中处于同一事务发生的操作,出现运行时异常默认回滚,非运行时异常不回滚


  设置非运行时异常回滚:
    no-rollback-for="包名.类名" 一般是java.lang.Exception
  设置运行时异常不回滚:
    rollback-for="包名.类名" 


 -->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值