无论chunk是新的还是重复的用例1,没有这两项,如果在Writer中第二个事务失败,我希望回滚第一个事务,而不手动执行回滚和提交。因此,如果写抛出异常,它将自动回滚第一个事务。这很好。但我想要的是,即使有异常和事务回滚(对于那个块),我也希望以相同的方式、相同的行为继续下一个块,依此类推到最后一个块。
为了实现用例1,我想我必须将步骤配置为:
@Configuration
@EnableBatchProcessing
@EnableScheduling
@Slf4j
public class BatchConfiguration {
private final JobBuilderFactory jobBuilderFactory;
private final StepBuilderFactory stepBuilderFactory;
private final MyItemReader myItemReader;
private final MyItemProcessor myItemProcessor;
private final MyItemWriter myItemWriter;
private final SimpleJobExecutionListener simpleJobExecutionListener;
private final MyChunkListener myChunkListener;
private final ApplicationContext applicationContext;
private final DataSource dataSource;
public BatchConfiguration(
JobBuilderFactory jobBuilderFactory,
StepBuilderFactory stepBuilderFactory,
MyItemReader myItemReader,
MyItemProcessor myItemProcessor,
MyItemtWriter myItemWriter,
SimpleJobExecutionListener simpleJobExecutionListener,
MyChunkListener myChunkTransactionListener,
DataSource dataSource,
ApplicationContext applicationContext) {
this.jobBuilderFactory = jobBuilderFactory;
this.stepBuilderFactory = stepBuilderFactory;
this.myItemReader = myItemReader;
this.myItemProcessor = myItemProcessor;
this.myItemWriter = myItemWriter;
this.simpleJobExecutionListener = simpleJobExecutionListener;
this.myChunkListener = myChunkListener;
this.dataSource = dataSource;
this.applicationContext = applicationContext;
}
@Bean
public Job registrationChunkJob() {
return jobBuilderFactory.get("MyJob")
.incrementer(new RunIdIncrementer())
.listener(simpleJobExecutionListener)
.flow(step()).end().build();
}
@Bean
TaskExecutor taskExecutorStepPush() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(2);
taskExecutor.setMaxPoolSize(20);
taskExecutor.setQueueCapacity(4);
taskExecutor.setAllowCoreThreadTimeOut(true);
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
taskExecutor.setThreadNamePrefix(LoggingUtil.getWeblogicName() + "-");
return taskExecutor;
}
@Bean
public Step step() {
DefaultTransactionAttribute attribute = new DefaultTransactionAttribute();
attribute.setPropagationBehavior(Propagation.REQUIRED.value());
attribute.setIsolationLevel(Isolation.READ_COMMITTED.value());
return stepBuilderFactory.get("myStep").<MyObject, MyObject>chunk(5)
.reader(myItemReader)
.processor(myItemProcessor)
.faultTolerant()
.writer(myItemWriter)
.listener(myChunkListener)
.taskExecutor(taskExecutorStepPush())
.throttleLimit(5)
.transactionAttribute(attribute)
.build();
}
我的工作没有安排。当当前工作完成时,我手动开始下一个工作,成功与否。正如我所说的,我不会从Writer中更改DB中的标志,所以如果它失败了,一些数据被跳过并且在DB(Writer)中没有更新,当作业完成后1h它将从DB中开始新的作业并尝试使用相同的(可能是新的)项目(Reader将选择它们,因为标记不会在处理时更新)。
我不想重复相同的块,如果它从作家失败。我只想重复块,如果它在处理器中失败(以获得一个好的)。另外,如果chunk失败,我不希望job停止,我希望job继续下一个chunk等等...如何做到这一点?
如何跳过块中的任何错误并继续下一个项目?
要做到这一点,您需要配置哪些异常会导致跳过项,正如配置跳过逻辑部分所解释的那样。
根据您的配置,您没有指定任何可跳过的异常。您的步骤定义应该类似于:
@Bean
public Step step() {
DefaultTransactionAttribute attribute = new DefaultTransactionAttribute();
attribute.setPropagationBehavior(Propagation.REQUIRED.value());
attribute.setIsolationLevel(Isolation.READ_COMMITTED.value());
return stepBuilderFactory.get("myStep").<MyObject, MyObject>chunk(5)
.reader(myItemReader)
.processor(myItemProcessor)
.faultTolerant()
// add skip configuration
.skipLimit(10)
.skip(MySkippableException.class)
.writer(myItemWriter)
.listener(myChunkListener)
.taskExecutor(taskExecutorStepPush())
.throttleLimit(5)
.transactionAttribute(attribute)
.build();
}
我有一个如下结构的场景: 如您所见,在第二个示例中有一个参数“被忽略”。如果我在运行时检测到这个关键字,我希望跳过出现关键字的步骤。 目前我使用这个: 如果存在IGNORED关键字,则此步骤将设置为PASSED。相反,我想要的是将这单个步骤标记为SKIPPED,并且仍然执行以下步骤,然后根据其他步骤的状态将完整的测试场景标记为PASSED或FAILED。 所以我的问题是: 有没有办法手动将 Cuc
我正在写一个网页抓取程序,我面临着以下问题。当我的URL是*. doc或*. jpg等时,我的当前请求不会超时,也不会传递到下一个URL。 例如: 你能帮我获取()url吗?但有些url需要10秒钟,然后转到下一个吗?? 我还尝试了eventled: 我收到了如下一系列错误: Traceback(最近一次调用): File"emailCrawler.py", line 69, in getLink
因此,我正在开发一个程序,允许用户将学生添加到班级中,并管理他们的成绩等等。当用户选择菜单中的第一个选项时,他必须输入一个id(必填),但他也可以添加数字分数和/或字母等级。根据另一篇文章中的反馈,我设法创建了一个字符串变量行来读取用户输入,然后检查它是否为“S”/“S”(跳过或不跳过),并相应地将值解析为double。现在基于这个问题,如果用户决定跳过添加分数,我如何跳过提示并继续下一个提示?我
问题内容: 当我定义一个任务在多个远程服务器上运行时,如果该任务在一个服务器上运行并退出并出现错误,Fabric将停止并中止该任务。但我想让Fabric忽略该错误并在下一台服务器上运行该任务。我怎样才能做到这一点? 例如: 问题答案: 从文档: … Fabric默认为“快速失败”行为模式:如果发生任何错误,例如远程程序返回非零返回值或fabfile的Python代码遇到异常,则执行将立即停止。 这
我有一个带有以下方法的TestNG类。 我想实现的是:Test2、Test3和Test 4依赖于Test1。所以只有当Test1通过时,我才需要继续。 Test5依赖于Test2、Test3和Test4。但是我可以跳过任何测试(即Test2、Test3或Test4),并且如果其他测试没有失败,我仍然希望继续执行Test5。 我怎样才能做到这一点。
如下所示,我有3张表,即:表“Shops Fruits Data”,表(“Months”)和表(“Output”)。 我正在尝试将数据从“Shops Fruits data”表中复制到(“Output”)结构中,该数据基于从表中的月份(“months”)。我已经写了一段代码。然而,使用这段代码,我只能遍历第一行。我不明白,我怎样才能继续到下一排,直到最后一排。其次,我也不能将商店和水果的名称复制到