【问题标题】:TransactionScope class equivalent in Spring Framework?Spring Framework中的TransactionScope类等效?
【发布时间】:2012-05-30 16:24:51
【问题描述】:

什么是 Spring 中 TransactionScope(.Net) 的等效类。

【问题讨论】:

  • @TransactionAttribute(TransactionAttributeType.MANDATORY)

标签: java .net spring transactions spring-transactions


【解决方案1】:

@Transactional 注释看起来等效。

这可以放在类和方法上,可以通过传播、隔离、回滚等来定义。

【讨论】:

    【解决方案2】:

    我对 .Net 一无所知,所以我不确定这是否是您正在寻找的。您可以使用SimpleTransactionScope 在事务的整个生命周期中维护对象。默认情况下它没有注册,所以你必须像任何自定义范围一样在 spring core 中注册它,并给它一个字符串名称。然后,如果您愿意,还可以创建一个专门用于注册的注释。

    几年前,在这个问题确定之后,我的问题就提出了这个建议。我们专门要求它用于跨服务注入的多种方法的时间戳。你可以这样做。

    public class SimpleTransactionFactoryPostProcessor implements BeanFactoryPostProcessor {
    
        @Override
        public void postProcessBeanFactory(ConfigurableListableBeanFactory factory) throws BeansException {
            factory.registerScope("transaction", new SimpleTransactionScope());
        }
    }
    
    
    @Configuration
    class MyConfiguration {
    
        @Scope(scopeName = "transaction")
        @Bean
        Instant nowInstant() {
           return Instant.now();
        }
    
    }
    
    @Service
    class MyService {
    
        private final ObjectFactory<Instant> nowFactory;
    
        MyService( @Qualifier("nowInstant") ObjectFactory<Instant> nowFactory ) {
           this.nowFactory = nowfactory
        }
    
        @Transactional
        public boolean nowisEqualAlways() {
           var now = nowFactory.getObject();
           var sameNow = nowFactory.getObject();
           return Objects.equals( now, sameNow );
        }
    }
    

    如果您不这样做,您的now 实际上可能会在您的交易过程中发生一小段时间的变化。您可以简单地通过在测试中发送垃圾邮件来测试它。

    它可能不是您的需求所必需的,所以我很难说(显然您的需求可能早已过去,但很有希望。虽然这对将来的某人有所帮助)

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-01
      • 2013-07-07
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多