精华内容
下载资源
问答
  • JAVA@Transactional 作用范围环境结论 环境 MySQL 5.7 默认事务隔离级别 JDK 1.8 结论 1、同一个事务中,增删改可见(未提交的保存在undo中) 2、不同事务之间不可见

    JAVA@Transactional 作用范围

    环境

    MySQL 5.7 默认事务隔离级别
    JDK 1.8

    结论

    1、同一个事务中,增删改可见(未提交的保存在undo中)

    2、不同事务之间不可见

    展开全文
  • java @transactional注解

    2019-12-19 13:47:54
    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED) 学习事务使用 学习地址:https://www.cnblogs.com/clwydjgs/p/9317849.html Spring事务属性 传播行为和隔离级别...

    个人应用

    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)

    学习事务使用

    学习地址:https://www.cnblogs.com/clwydjgs/p/9317849.html

    Spring事务属性 传播行为和隔离级别(propagation 和 isolation)

    学习地址:https://blog.csdn.net/android_bar/article/details/78193371

    展开全文
  • java @Transactional 事务作用生效

    千次阅读 2019-07-09 16:01:03
    1.主方法有@Transactional,其它调用service没有,可事物一致性 2.主方法有@Transactional,其它调用service也有,可事物一致性 (1/2共通)方法体全部用try包裹,无法事务一致性 方法体部分用try包裹,try里没有...

    1.主方法有@Transactional,其它调用service没有,可事物一致性

    2.主方法有@Transactional,其它调用service也有,可事物一致性
     

    (1/2共通)方法体全部用try包裹,无法事务一致性
     方法体部分用try包裹,try里没有事务,try外事务一致。
    当try里发生运行异常,try里和try外程序都不会回滚,
    当try外发生运行异常时,try里和try外都会回滚

     

    3.主方法没有@Transactional,其它调用service有(独立的service可事物一致),不可事物一致性(各自运行各自的)

    展开全文
  • Java的@Transactional事务回滚

    万次阅读 2019-12-10 13:26:17
    在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional 的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否...

    @Transactional 基本原理概述

    在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional 的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否由拦截器 TransactionInterceptor 来使用拦截,在 TransactionInterceptor 拦截时,会在在目标方法开始执行之前创建并加入事务,并执行目标方法的逻辑, 最后根据执行情况是否出现异常,利用抽象事务管理器AbstractPlatformTransactionManager 操作数据源 DataSource 提交或回滚事务。

    处理Springboot下提交事务异常,数据库没有回滚的问题

    Spring文档中说道,Spring声明式事务管理默认对非检查型异常和运行时异常进行事务回滚,而对检查型异常则不进行回滚操作。

    什么是检查型异常和非检查型异常?

    最简单的判断点有两个:
    1、继承自runtimeException或error的是非检查型异常,而继承自exception的是检查型异常。
    2、对非检查型异常可以不用捕获,而检查型异常必须用try语句块进行处理或者把异常交给上级方法处理,总之就是必须写代码处理它。所以必须service捕获异常,然后再次抛出,这样事务才能生效。

    默认规则:

    1、让检查型异常也回滚,@Transactional(rollbackFor=Exception.class),一般只需添加这个即可

    2、让非检查型异常不回滚,@Transactional(notRollbackFor=RunTimeException.class)

    3、不需要事务管理的(就是只是查询用)方法,@Transactional(propagation=Propagation.NOT_SUPPORTED),或者不添加

    4、手动回滚,TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    例如:

    try {
            String name = (String) list.get(j - 1).get("name");
          } catch (Exception e) {
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
            return ResultUtil.error(500, "文件解析错误");
           }
    

    你需要注意的事

    1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能
    2.Spring团队的建议是你在具体的类(或类的方法)上使用 @Transactional 注解,而不要使用在类所要实现的任何接口上。
    3.当然可以在接口上使用 @Transactional 注解,但是这将只能当你设置了基于接口的代理时它才生效。因为注解是不能继承的,这就意味着如果你正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装(将被确认为严重的)。因此,还是在具体的类上使用 @Transactional 注解比较好。
    4.避免 Spring 的 AOP 的自调用问题:自调用就是方法A内调用本类的另一个加上事务注解的方法B时,方法B中对数据库的操作是不带事务的。

    Spring AOP 代理下,只有目标方法由外部调用,目标方法才由 Spring 生成的代理对象来管理,这会造成自调用问题。若同一类中的其他没有@Transactional 注解的方法内部调用有@Transactional 注解的方法,有@Transactional 注解的方法的事务被忽略,不会发生回滚。
    失效原因:
    在这里插入图片描述
    方法one方法two都是public的:

    classA中 ,任意要调用classB的方法,是通过spring代理的方式,那么spring的注解才会生效
    classA中,方法one 调用同class内的方法two,即this调用,spring注解不会生效(例如@Cachable,@Transaction)

    解决方法

    方案一:使用AspectJ代理

    @Service
    public class OrderService {
        private void insert() {
            insertOrder();
        }
    @Transactional
        public void insertOrder() {
            //insert log info
            //insertOrder
            //updateAccount
           }
    }
    

    insertOrder 尽管有@Transactional 注解,但它被内部方法 insert 调用,事务被忽略,出现异常事务不会发生回滚。

    上面的两个问题@Transactional 注解只应用到 public 方法和自调用问题,是由于使用 Spring AOP 代理造成的。为解决这两个问题,可以使用 AspectJ取代 Spring AOP 代理,但现在有更好的解决方法。

    方案二:利用AopContext.currentProxy()方法获得代理

    方法的意思是尝试返回当前AOP代理。这种做法非常简洁,但是在默认情况下是不起作用的!因为AopContext中拿不到currentProxy,会报空指针。需要一些额外的配置,但不能对所有的注解拦截都有效,这是因为这些注解不是用的AspectJ代理,如果是@Transactional事务注解的话, 则是生效的,具体细节要翻源码了,这里不推荐使用。

    方案三:通过ApplicationContext来获得动态代理对象(推荐)

    @Component
    public class AsyncService implements ApplicationContextAware {
    
        private ApplicationContext applicationContext;
    
        public void async1() {
            System.out.println("1:" + Thread.currentThread().getName());
            // 使用AppicationContext来获得动态代理的bean,然后再执行你调用的方法
            this.applicationContext.getBean(AsyncService.class).async2();
        }
    
        @Async
        public void async2() {
            System.out.println("2:" + Thread.currentThread().getName());
        }
    
        // 注入ApplicationContext
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
            this.applicationContext = applicationContext;
        }
    }
    
    展开全文
  • 事件原有: 我需要读A库的数据写到B库中 中途需要切换数据源 但是我们又不是分布式的项目如果加上了@Transactional切换数据源就不会生效了 这时候就用到了事务的手动回滚 try { //进行删除操作 ...
  • @Transactional注解方式: @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class) @Transactional属性 属性名 类型 ...
  • 添加上@Transactional(rollbackFor = Exception.class) 就可以出现异常就全部回滚了。 参考链接:https://blog.csdn.net/weixin_41485592/article/details/80877665       转载...
  • @Transactional 详解

    万次阅读 多人点赞 2018-11-23 16:47:14
    @Transactional 是声明式事务管理 编程中使用的注解 1 .添加位置 1)接口实现类或接口实现方法上,而不是接口类中。 2)访问权限:public 的方法才起作用。@Transactional 注解应该只被应用到 public 方法上,这是...
  • @Transactional(propagation=Propagation.REQUIRED) 2)NOT_SUPPORTED Spring不为当前方法开启事务,相当于没有事务 @Transactional(propagation=Propagation.NOT_SUPPORTED) 3)REQUIRES_NEW 不管是否存在事务,...
  • java异常与@Transactional回滚

    千次阅读 2018-07-03 14:14:47
    java异常与@Transactional 概述:java的异常分为Error 和 Exception 。这两类都是接口Throwable 的子类。 异常分类方式: 1.运行时异常 和 非运行时异常 2.可查的异常(checked exceptions)和 不可查的异常...
  • 主要介绍了Java注解@Transactional事务类内调用不生效问题及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 目录引言事务@Transactional介绍@Transactional注解可以作用于哪些地方?@Transactional注有哪些属性?propagation属性isolation 属性 引言 在开发过程中,经常需要使用的事务保证业务逻辑一致性。这个时候可以使用...
  • java异常与@Transactional

    2019-11-11 11:52:56
    概述:java的异常分为Error 和 Exception 。这两类都是接口Throwable 的子类。 异常分类方式: 1.运行时异常 和 非运行时异常 2.可查的异常(checked exceptions)和 不可查的异常(unchecked exceptions) 总结 ...
  • @Transactional java中的事务及使用

    千次阅读 2020-09-18 14:55:10
    @Transactionaljava中使用的注解形式的事务 既然使用@Transactional就要理解什么是事务.下面将会详细介绍. 1:什么是事务? 事务(Transactional) 就是把多个要做的操作组合成一个整体.利用事务的特性来保证操作...
  • 事务处理 Java OOP
  • java事务回滚 @Transactional

    千次阅读 2018-12-24 11:17:41
    在方法中,使用 throw new Exception 或 try{}catch(){} 抛出或捕获异常的,不会形成是事务回滚。 可以在事务回滚的时候加上 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();...
  • @Transactional 注解 它能保证方法内多个数据库操作要么同时成功、要么同时失败。 事务方面:主要分为2种 1.编程式事务 2.声明式事务 1.手动指定: try { //TODO something transactionManager.commit...
  • 如果@transactional事务注解加在单测上,所测试的数据不会对数据库有影响,不会污染数据库 @transactional事务注解加在单测上,只测试功能,测试完毕后会回滚数据 ...
  • @Transactional在main.java的service下是抛出异常回滚 @Transactional在test.java的下是全部回滚,不管成功不成功
  • 1.开启了@Transactional注解 2.数据库中保存了一条数据,然后下一行代码查询是可以查询到这条数据的,但是数据库中没有 原因是:在开启事务后,只有commit事务提交后才可以查询到 ...
  • @Transactional 进阶 1. @Transactional 注解的属性信息 属性 描述 name 当在配置文件中有多个 TransactionManager , 可以用该属性指定选择哪个事务管理器 propagation 事务的传播行为,默认值为 ...
  • 注:如果是多数据源则为:@Transactional(transactionManager = "userTransactionManager") userTransactionManager为数据源的管理器 多数据源项目分布式事务方案:jta+atomikos 分布式领域解决分布式事务方案...
  • JAVA事务管理注解原理-@Transactional

    万次阅读 2019-08-26 11:00:57
    Spring是通过单例模式将@Transactional注解中的内容加载进来的,中间有一些是BeanFactory的工作,我省去了,直接从注解相关的类开始写流程了,流程大致如下图所示: 1.2 核心源码 源码部分主要记录一下spring...
  • Java事务之七——使用Transactional注解 本文转载自:http://www.cnblogs.com/davenkin/archive/2013/02/24/java-tranaction-7.html,侵删。  在本系列的上一篇文章中,我们讲到了使用动态代理的方式...
  • @Transactional(rollbackFor = {Exception.class},noRollbackFor = PoliceNameErrorException.class) rollbackFor指定回滚的异常, noRollbackFor指定不需要回滚的异常,这样写对吗
  • Java Spring事务管理与@Transactional注解式事务详解 MicoCube关注 2019.02.04 16:43:36字数 2,771阅读 1,447 spring事务管理是指在业务代码在出现异常之后,对之前的操作进行回滚,保证数据库数据的一致性 ...
  • } @Transactional public void updateOrder(Order order) { // update order } } @Service public class OrderServiceImpl implements OrderService { @Transactional public void update(Order order) { update...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,122
精华内容 29,248
关键字:

java的transactional

java 订阅