我可以将FlatfileItemReader与Taskexecutor一起使用吗?

里特什:

我可以在春季批处理中将FlatfileItemReader与Taskexecutor一起使用吗?

我已经用ThreadPoolTask​​Executor实现了FlatFileItemReader。当我在ItemProcessor中打印记录时,没有得到一致的结果,即不是所有记录都被打印,有时其中一个记录被打印多次。这使我想到一个事实,即FlatFileItemReader不是线程安全的,并且在spring文档中也是如此,但是我看到一些博客说可以在Task Executor中使用FlatFileItemReader。

所以我的问题是:是否可以将FlatfileItemReader与Task Executor一起使用?

    @Bean
    @StepScope
    public FlatFileItemReader<DataLifeCycleEvent> csvFileReader(
            @Value("#{stepExecution}") StepExecution stepExecution) {

        Resource inputResource;
        FlatFileItemReader<DataLifeCycleEvent> itemReader = new FlatFileItemReader<>();

        itemReader.setLineMapper(new OnboardingLineMapper(stepExecution));
        itemReader.setLinesToSkip(1);
        itemReader.setSaveState(false);
        itemReader.setSkippedLinesCallback(new OnboardingHeaderMapper(stepExecution));
        String inputResourceString = stepExecution.getJobParameters().getString("inputResource");
        inputResource = new FileSystemResource(inputFileLocation + ApplicationConstant.SLASH + inputResourceString);
        itemReader.setResource(inputResource);
        stepExecution.getJobExecution().getExecutionContext().putInt(ApplicationConstant.ERROR_COUNT, 0);
        return itemReader;
    }
Mahmoud Ben Hassine:

FlatFileItemReader扩展AbstractItemCountingItemStreamItemReader这是不是线程安全的因此,如果在多线程步骤中使用它,则需要对其进行同步。

您可以将其包装在中SynchronizedItemStreamReader这是一个简单的示例:

@Bean
public SynchronizedItemStreamReader<DataLifeCycleEvent> itemReader() {
    FlatFileItemReader<DataLifeCycleEvent> itemReader = ... // your item reader

    SynchronizedItemStreamReader<DataLifeCycleEvent> synchronizedItemStreamReader = new SynchronizedItemStreamReader<>();
    synchronizedItemStreamReader.setDelegate(itemReader);
    return synchronizedItemStreamReader;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我现在可以将Java 8与Android Development一起使用吗?

我可以将View pager与视图一起使用吗(不能与片段一起使用)

我可以将xaml ApplicationResources与MvvmCross应用程序一起使用吗

我可以将多个try块与一个catch块一起使用吗

我可以将Kotlin与Codename One一起使用吗?

我可以将Docker Compose与使用builder模式的图像一起使用吗?

我可以将lambda与动态lambda列表一起使用(不带宏)吗?

我可以将Cloud Dataproc与外部Hive Metastore一起使用吗?

我可以将concat与toString一起使用吗?

我可以将Twisted GTK Reactor与UDP接收器一起使用吗?

我可以将accept()与IOCP一起使用吗?

我可以将Materializecss与dart一起使用吗?

我可以将HaxeUI与HaxeFlixel一起使用吗?

我可以将MCBrowserViewControllerDelegate与GameViewController类一起使用,而不要与ViewController类一起使用吗?

我可以将Underscore的“ where”与“ or”一起使用吗?

将TaskExecutor与PublishSubscribeChannel一起使用

我可以将Selenium方法与Intern / Leadfoot方法一起使用吗?

我可以将 Bootstrap 与 RCloud 一起使用吗?

我可以将“令牌粘贴运算符”与“const”模板参数一起使用吗?

我可以将 OSGi Mocks 与声明性服务注释一起使用吗

我可以将 Guava 的服务与 API 提供的 ExecutorService 一起使用吗?

我可以将 mapreduce 与一对键和一对值一起使用吗?

我可以将 AutoMapper 与 Blazor 一起使用吗?

我可以将 Envoy 与 Linkerd 一起使用吗?

我可以将 pivot_longer() 与 srvyr 的调查设计对象一起使用吗?

我可以将 mlDatabasesWithForestsOnOneHost 与副本一起使用吗?

我可以将 SUMIF 与 OFFSET 一起使用以获得我的总数吗?

我可以将 `eval` 与 `rolling()` 一起使用吗?

将 FlatFileItemReader 和 MultiResourceItemReader 与 SynchronizedItemStreamReader 一起使用