Spring-事务

原子性 一致性  隔离性 持久性

保证多条SQL语句同生共死


一、spring的事务

spring的事务可以加载任意位置 ,使用起来比较方便


1.注解式:在方法的头上加上 @Transactional


2.配置式:

<!--配置事务通知-->

    <tx:advice id="txAdvice" transaction-manager="transactionManager">

        <tx:attributes>

            <tx:method name="select*" read-only="true" propagation="REQUIRED" isolation="DEFAULT" timeout="-1" rollback-for="java.lang.RuntimeException"/>

            <tx:method name="insert*" ></tx:method>

            <tx:method name="update*" ></tx:method>

            <tx:method name="delete*" ></tx:method>

        </tx:attributes>

    </tx:advice>

    <!--使用aop将事务添加上方法上-->

    <aop:config>

        <aop:pointcut id="txPointcut" expression="execution(* com.qianfeng.service.*.*(..))"/>

        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>

    </aop:config>


二、spring事务的属性

1.propagation

事务的传播行为  A方法调用B方法, A方法是外层方法

写在内层方法上

REQUIRED :  外层方法如果有事务, 内存方法会合并到外城方法的事务上

NESTED : 外层方法事务, 同时都保留 , 如果外层方法内报错了, 整体回滚, 内层方法报错, 自己回滚

REQUIRES_NEW : 不管外层方法怎么样, 内层放都用自己的事务, 挂起外层的事务

2.isolation

default (默认值)(采用数据库的默认的设置) (建议)

read-uncommited  读未提交 

read-commited  读提交 (Oracle数据库默认的隔离级别) 

repeatable-read  可重复读 (MySQL数据库默认的隔离级别) 

serialized-read  序列化读

3.timeout

事务超时时间

-1 : 使用数据库默认的超时时间

100 : 具体值, 单位秒

4.readOnly

暗示数据库本次请求是查询

生不生效要看数据库支不支持  mysql支持, orcle 不支持 , 舍不舍无所谓

使用支持的数据库是, 如果在修改中设置为ture,会报错

5.rollback-for

这时一个异常类型, 小于等于类型小的可以触发回滚

6.no-rollback-for

某个异常下不回滚

7.@Autowired, @Resource

Autowired 是按照类型注入

Resource 是按照名称注入

实际上用哪个都一样

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。