spring基于注解事务管理

spring事务管理

          四大特性
        1.原子性:事物要么全部执行,要么全部回滚

                2.隔离性:每一个事物都有自己的缓存区,事物之间相互不影响。

        3.持久性:事物可以将数据持久化。
 

        4.一致性:使数据库从一个一致性状态变换到另一个一致性状态,事物执行之前和执行之后都

   一、 隔离行为:

         1. islocation,首先先来说隔离行为的目的:

                        1).为了有效防止脏读,重复读,幻读。

                        2).为了在提高安全的前提下同时提高其性能。

        

         2.什么是脏读、重复读、幻读?

                        1). 脏读:

                             是指一个事物读取了另一个事物未提交的数据。即事务A为查询操作还为提交,事务B这时执行了增加操作                               也还为提交,事务A这时查询的结果为事务B增加的数据。

                        2.)重复读:

                           是指一个事物多次读取同一数据,但是在多次读取之间,有另一个事物提交,将数据修改了,这就造成我                               们多次读取的结果并不都是一样的。

                        3.)幻读:

                            是指第一个事物对全部数据行进行了修改,这时第二个事物插入了新的一行数据,这时候我们第一个事物再                              去查询刚刚修改的全部数据时,便会发现还没有修改的数据。
 

              隔离级别为4种:

                        Read_nocommit  什么都不可以防止

                        Read_commit  可以防止脏读,不可防止重复读和幻读。

                        repeatable_read   可以防止脏读和重复读

                        Serilazible  可防止脏读和重复读和幻读

             (因为程序一般都是在多线程环境下进行的,会存在多个事务并发进行,如果隔离级别选择Serilazibel,则相当于将操作

              的数据加上了锁机制,这时事务便会依次执行,虽然这样可以防止脏读、幻读、重复读,但是对于性能方面便会大大降

              低,mysql默认的隔离级别为Read_commit。) 

二、传播行为

    propagation

            1.propagation_required 当前没有事务变创建一个事务,如有有则使用

            2.propagation_supports 支持当前事务,有则使用,没有则不使用

            3. propagation_mandatory  支持当前事务,有则使用,没有则抛出异常

            4.propagation_requires_new 无论有没有,都创建新事务

            5.propagation_not_supported  非事务方式提交,有则挂起该事务

            6.propagation_never 非事务提交,有则抛出异常

            7.propagation_nested 存在事务,在嵌套事务内执行,没有,则创建一个事务

三、@Transcational

    注解的属性:

           1.readOnly 为true表示只读,false,可以读写,默认为false

           2.islocation 隔离行为,mysql默认为Read_commit

           3.propagation 传播行为,默认为propagation_required

           4.timeout 事物超时时间,默认-1,永不超时

           5.rollbackfor 回滚抛出异常数组该,rollbackFor=RuntimeException.class,则事物回滚

           6.roallbackForClassName 抛出异常类名称数组,rollbackForClassName={"RuntimeException",Exception},回

              滚事物

           7.norollback 抛出该异常数组名称,rollbackForClassName={"RuntimeException",Exception},不进行回滚事物

      

                                              更多java技术请关注微信公众号:

                                                                     

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值