Java 弹簧批不';t在块流中同时调用ItemProcessor和ItemWriter

Java 弹簧批不';t在块流中同时调用ItemProcessor和ItemWriter,java,spring-batch,Java,Spring Batch,我有一个spring批处理应用程序来获取samba服务器中的文件 并在同一服务器上的不同文件夹中生成新文件。 然而, 流中只调用ItemReader。 有什么问题?谢谢 批处理配置: @配置 @启用批处理 公共类BatchConfiguration扩展了BaseConfiguration{ @豆子 公共ValeTrocaItemReader(){ 返回新的ValeTrocaItemReader(); } @豆子 公共ValeTrocaItemProcessor处理器(){ 返回新的ValeTro

我有一个spring批处理应用程序来获取samba服务器中的文件 并在同一服务器上的不同文件夹中生成新文件。 然而, 流中只调用ItemReader。 有什么问题?谢谢

批处理配置:

@配置
@启用批处理
公共类BatchConfiguration扩展了BaseConfiguration{
@豆子
公共ValeTrocaItemReader(){
返回新的ValeTrocaItemReader();
}
@豆子
公共ValeTrocaItemProcessor处理器(){
返回新的ValeTrocaItemProcessor();
}
@豆子
公共职业介绍所编剧(){
返回新的ValeTrocaItemWriter();
}
@豆子
公共作业导入器作业(JobCompletionNotificationListener侦听器)引发异常{
返回jobBuilderFactory()
.get(“importUserJob”)
.incrementer(新的RunIdIncrementer())
.repository(getJobRepository())
.listener(侦听器)
.start(此.step1())
.build();
}
@豆子
公共步骤step1()引发异常{
返回stepBuilderFactory()
.get(“步骤1”)
.chunk(10)
.reader(此.reader())
.processor(此.processor())
.writer(此.writer())
.build();
}
}
基本配置:

公共类BaseConfiguration实现BatchConfigurer{
@豆子
@凌驾
公共平台TransactionManager getTransactionManager(){
返回新的ResourcesTransactionManager();
}
@豆子
@凌驾
公共SimpleJobLauncher getJobLauncher()引发异常{
final simplejoblancher simplejoblancher=新的simplejoblancher();
simpleJobLauncher.setJobRepository(this.getJobRepository());
返回simplejoblancher;
}
@豆子
@凌驾
public JobRepository getJobRepository()引发异常{
返回新的MapJobRepositoryFactoryBean(this.getTransactionManager()).getObject();
}
@豆子
@凌驾
PublicJobExplorer getJobExplorer(){
MapJobRepositoryFactoryBean repositoryFactory=this.getMapJobRepositoryFactoryBean();
返回新的SimpleJobExplorer(repositoryFactory.getJobInstanceDao(),repositoryFactory.getJobExecutionDao(),
repositoryFactory.getStepExecutionDao(),repositoryFactory.getExecutionContextDao());
}
@豆子
公共MapJobRepositoryFactoryBean getMapJobRepositoryFactoryBean(){
返回新的MapJobRepositoryFactoryBean(this.getTransactionManager());
}
@豆子
public JobBuilderFactory JobBuilderFactory()引发异常{
返回新的JobBuilderFactory(this.getJobRepository());
}
@豆子
公共StepBuilderFactory StepBuilderFactory()引发异常{
返回新的StepBuilderFactory(this.getJobRepository(),this.getTransactionManager());
}
}
ValeTrocaItemReader:

@配置
公共类ValeTrocaItemReader实现ItemReader{
@值(Value=“${url}”)
私有字符串url;
@值(Value=“${user}”)
私有字符串用户;
@值(Value=“${password}”)
私有字符串密码;
@值(Value=“${domain}”)
私有字符串域;
@值(Value=“${inputDirectory}”)
私有字符串输入目录;
@豆子
@凌驾
public ValeTroca read()引发畸形的异常,SmbException,IOException,Exception{
File tempOutputFile=getInputFile();
DefaultLineMapper lineMapper=新的DefaultLineMapper();
lineMapper.setLineTokenizer(新的DelimitedLineTokenizer(){
{
setDelimiter(“;”);
集合名(新字符串[]{“id_participante”、“cpf”、“valor”});
}
});
lineMapper.setFieldSetMapper(
新的BeanRapperFieldSetMapper(){
{
setTargetType(ValeTroca.class);
}
});
FlatFileItemReader itemReader=新FlatFileItemReader();
itemReader.setLinesToSkip(1);
setResource(新的FileUrlResource(tempOutputFile.getCanonicalPath());
itemReader.setLineMapper(lineMapper);
打开(新的ExecutionContext());
tempOutputFile.deleteOnExit();
返回itemReader.read();
}
项目处理器示例:

公共类ValeTrocaItemProcessor实现ItemProcessor{
@凌驾
ValeTroca公共流程(ValeTroca项目){
//做任何事
ValeTroca项目2=项目;
System.out.println(item2.getCpf());
返回项目2;
}
编辑:
-Spring boot 2.1.2.RELEASE-Spring批处理4.1.1.RELEASE查看您的配置,这里有几个注意事项:

  • BatchConfiguration
    看起来不错。这是一个典型的作业,只需一个面向块的步骤
  • BaseConfiguration
    实际上是在不提供数据源的情况下使用
    @EnableBatchProcessing
    时得到的默认配置。因此可以删除此类
  • ValeTrocaItemReader
    上添加
    @Configuration
    ,并标记方法
    read()
    @Bean
    不正确。这意味着您正在应用程序上下文中声明类型为
    ValeTroca
    的名为
    read
    的Bean。此外,您的自定义读取器使用
    FlatFileItemReader
    ,但与
    FlatFileItemReader
    相比没有附加值。您可以将读取器声明为
    Fla>t FileItemReader
    并根据需要对其进行配置(资源、行映射器等)。这还将避免在
    read
    方法中打开执行上下文的错误,这应该在初始化读取器时进行,或者在读取器实现
    ItemStream
    时在方法中进行