Spring批处理Java配置事务属性等效

Spring批处理Java配置事务属性等效,java,spring,spring-batch,Java,Spring,Spring Batch,在Spring batch中,您可以如下设置事务隔离和传播: <job id="someJob" xmlns="http://www.springframework.org/schema/batch"> <step id="readWriteDate"> <tasklet transaction-manager="transactionManager"> <transaction-attributes isolatio

在Spring batch中,您可以如下设置事务
隔离
传播

<job id="someJob" xmlns="http://www.springframework.org/schema/batch">
   <step id="readWriteDate">
      <tasklet transaction-manager="transactionManager">
         <transaction-attributes isolation="DEFAULT" propagation="REQUIRED" timeout="30"/>
         <chunk reader="dbItemReader" processor="dbItemProcessor" writer="dbItemWriter"
                commit-interval="2" />
      </tasklet>
   </step>
</job>

我找不到java配置的等价物。

它就在那里

@Configuration
public class StepWithTx {

    @Autowired
    private StepBuilderFactory steps;

    @Bean
    public Step step() throws Exception {
        return steps
                .get("CustomTxStep")
                .<String, String>chunk(10)
                .transactionAttribute(transactionAttribute...)
                .reader(reader...)
                .processor(processor...)
                .writer(writer...)
                .build();
    }
}
@配置
公共类StepWithTx{
@自动连线
私人StepBuilderFactorySteps;
@豆子
公共步骤()引发异常{
返回步骤
.get(“CustomTxStep”)
.chunk(10)
.transactionAttribute(transactionAttribute…)
.读卡器(读卡器…)
.处理器(处理器…)
.作者(作者…)
.build();
}
}
对于默认实现,请看一下

它就在那里

@Configuration
public class StepWithTx {

    @Autowired
    private StepBuilderFactory steps;

    @Bean
    public Step step() throws Exception {
        return steps
                .get("CustomTxStep")
                .<String, String>chunk(10)
                .transactionAttribute(transactionAttribute...)
                .reader(reader...)
                .processor(processor...)
                .writer(writer...)
                .build();
    }
}
@配置
公共类StepWithTx{
@自动连线
私人StepBuilderFactorySteps;
@豆子
公共步骤()引发异常{
返回步骤
.get(“CustomTxStep”)
.chunk(10)
.transactionAttribute(transactionAttribute…)
.读卡器(读卡器…)
.处理器(处理器…)
.作者(作者…)
.build();
}
}

对于默认实现,请看一看

,就像Michael Pralow所说的那样。仅添加一个具体示例,您可以通过实例化默认事务属性来设置隔离级别:

DefaultTransactionAttribute transactionWithIsolationReadCommited = new DefaultTransactionAttribute(); transactionWithIsolationReadCommited.setIsolationLevel(TransactionAttribute.ISOLATION_READ_COMMITTED); DefaultTransactionAttribute TransactionWithIsolationReadCommitted=新建DefaultTransactionAttribute(); TransactionWithIsolationReadCommitted.setIsolationLevel(TransactionAttribute.ISOLATION\u READ\u COMMITTED);
然后在步骤生成器中使用它。希望有帮助

就像迈克尔·普拉洛说的那样。仅添加一个具体示例,您可以通过实例化默认事务属性来设置隔离级别:

DefaultTransactionAttribute transactionWithIsolationReadCommited = new DefaultTransactionAttribute(); transactionWithIsolationReadCommited.setIsolationLevel(TransactionAttribute.ISOLATION_READ_COMMITTED); DefaultTransactionAttribute TransactionWithIsolationReadCommitted=新建DefaultTransactionAttribute(); TransactionWithIsolationReadCommitted.setIsolationLevel(TransactionAttribute.ISOLATION\u READ\u COMMITTED);
然后在步骤生成器中使用它。希望有帮助

如果我像上面所示放置事务属性,我会得到编译错误-AbstractTaskletStepBuilder类型的方法读取器(ItemReader)未定义。如果在writer()之后和build()之前放置,则不会出现错误。如果如上图所示放置事务属性,则会出现编译错误-类型AbstractTaskletStepBuilder的方法读取器(ItemReader)未定义。如果在writer()之后和build()之前放置,则不会获得错误。