事务管理

Spring采用AOP机制完成事务控制。
可以实现在不修改原有组件代码情况下,实现事物控制功能。


Spring提供了2种事物管理方式:
a.编程式事务管理(编写Java代码)
TransactionTemplate
b.声明式事务管理(编写配置)
XML版本配置
注解版本配置
–配置DataSourceTransactionManager
–开启事务注解配置< tx:annotation>(<与tx之间无空格)
–在目标组件方法前添加@Transactional

<bean id="dbcp"
        class="org.apache.commons.dbcp.BasicDataSource">
        <property name="username" value="root"></property>
        <property name="password" value="123"></property>
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql:///cloud_note?userUnicode=true&amp;characterEncoding=utf8"></property>
</bean>
<!-- 配置事务管理组件DataSourceTransactionManager -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dbcp"></property>
</bean>

<!-- 开启事务注解标记@Transactional -->
<!-- 当调用带@Transactional标记的方法时,将txManager事务管理功能切入进去 -->
<!-- 
<tx:annotation-driven transaction-manager="txManager"/>
 -->
 <!-- XML版本配置 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="regist"/>
            <tx:method name="load*"/>
            <tx:method name="*"/>
        </tx:attributes>
 </tx:advice>

<aop:config>
        <aop:pointcut id="target" expression="within(org.tarena.note.service..*)"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="target"/>
</aop:config>

Spring对事务管理的控制
a.控制事务可读可写特性
spring分为可读写事务和只读事务
默认为可读写,一般只涉及查询操作,建议用只读事务
@Transactional(readOnly=true)

b.控制事务是否回滚
Spring遇到RuntimeException异常,会事务回滚;遇到非运行时异常不会事务回滚。
RuntimeException:空指针,类型转换异常…
@Transactional(rollbackFor=IOException.class)//遇到IOException,也会发生回滚。
建议:自定义异常从RuntimeException继承,这样不用加rollbackFor

c.控制事务传播类型
遇到带有事务控制方法调用另一个事务控制方法时,可以选择合适的传播类型。
默认是REQUIRED类型,后者使用前者事务。

d.控制事务隔离级别
由低到高如下:
READ_UNCOMMITED//读未提交
READ_COMMITED//读已提交
REPEATABLE_READ//可重复读
SERIALIZABLE//序列化
DEFAULT默认,根据数据库隔离级别自动选择。Oracle为READ_COMMITED
isolation=Isolation.READ_UNCOMMITED
级别越高,安全性越高,但处理效率越低;
级别越低,安全性越差,但处理效率越高;
平时使用建议采用默认default,遇到特殊问题,再采用加锁机制处理

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值