当前位置: 首页 > 知识库问答 >
问题:

如何在spring批处理中将一个bean从处理器传递给writer?

公冶威
2023-03-14

在我的spring批处理代码中,我正在读取一个csv文件,将其处理成一个bean,并尝试用Writer中的值获取该bean。但我无法在Writer中找到豆子。uservo是包含csv文件中的值的bean,我正试图在Writer中获取这些值。我还将bean初始化为一个公共变量,希望它能由读取器、处理器和写入器处理。甚至在uservouser=new UserVO();之前使用了@bean@autowired注释。请帮我解决这个问题。下面是我的代码,

@EnableBatchProcessing
@Configuration
public class CsvFileToDatabaseConfig {

    @Autowired
    public JobBuilderFactory jobBuilderFactory;

    @Autowired
    public StepBuilderFactory stepBuilderFactory;

    @Autowired
    public DataSource dataSource;

    UserVO user = new UserVO();

    @Bean
    public FlatFileItemReader<UserVO> csvReader() {
         FlatFileItemReader<UserVO> reader = new FlatFileItemReader<UserVO>();
        try{

        reader.setResource(new ClassPathResource("user.csv"));
        reader.setLineMapper(new DefaultLineMapper<UserVO>() {{
            setLineTokenizer(new DelimitedLineTokenizer() {{
                setNames(new String[] { "memberId", "mailId", "fullName", "appCode", "active"});
            }});
            setFieldSetMapper(new BeanWrapperFieldSetMapper<UserVO>() {{
                setTargetType(UserVO.class);
            }});
        }});

        }
        catch(Exception e){
            System.out.println(" Exception in reading " + e.getMessage());
        }
         return reader;
    }


    @Bean
    ItemProcessor<UserVO, UserVO> csvProcessor() {          
        return new Processor();
    }

    @Bean
    public JdbcBatchItemWriter<UserVO> csvWriter(UserVO user) {
         JdbcBatchItemWriter<UserVO> csvWriter = new JdbcBatchItemWriter<UserVO>();
         System.out.println("MEMBER ID --->" + user.memberId);
        return csvWriter;
    }

    @Bean
    public Step csvFileToDatabaseStep() throws Exception {
        LDSService ldsService = new LDSService();

        return stepBuilderFactory.get("csvFileToDatabaseStep")
                .<UserVO, UserVO>chunk(1)
                .reader(csvReader())
                .processor(csvProcessor())
                .writer(csvWriter(user))            
                .build();
    }

    @Bean
    Job csvFileToDatabaseJob(JobCompletionNotificationListener listener) throws Exception {
        return jobBuilderFactory.get("csvFileToDatabaseJob")
                .incrementer(new RunIdIncrementer())
                .listener(listener)
                .flow(csvFileToDatabaseStep())
                .end()
                .build();
    }

}

共有1个答案

汝跃
2023-03-14
public class SkipFooterLineItemProcessor implements ItemProcessor<UserVO, UserVO> {


    @Override
    public UserVO process(UserVO item) throws Exception {

       return item;

    }
}
 类似资料:
  • 我有一个要求,我需要从xls(其中存在一个名为netCreditAmount的列)中读取值并将值保存在数据库中。要求是从所有行中添加netCreditAmount的值,然后在数据库中仅为xls中的第一行设置此总和,其余行插入相应的netCreditAmounts。我应该如何在Spring Batch中进行实施。普通的阅读器、处理器和写入器工作正常,但我应该在哪里插入这个实现?谢谢!

  • 我有一个包含数据(案例)记录的CSV文件,为此我创建了一个对象,但是的某些属性必须是文件名中包含的数据的字段(每个文件都必须有一个包含一些数据的严格结构的名称)。 我想要实现的是将文件名中包含的数据传递给项目处理器,在这里,我将在传递给项目编写器之前将该数据追加到每个中。 当我从控制器启动作业时,是否有人知道如何将数据传递给步骤? 提前道谢。

  • 我有一个包含Reader->Processor->Writer的spring批处理。 B/W传递的数据类型为: 在中从CSV文件读取一个简单的批处理数据时,中的一些处理&输出CSV文件由编写。 请建议。如果你认为任何其他方法会更好,请建议。 谢谢

  • 我有带隔板的Spring批。gridSize是10,因此它将生成10个线程。一切都是默认的Bean单例。TaskExeutor最多有15个核心池10个。 这是读卡器,这个读卡器将返回数据库中的4行。自定义对象1到4。 示例查询: 设置非常简单。只是一个批处理过程,分区网格大小为10。 当我运行它时,Item reader会得到4条正确的记录。但当读卡器将数据传递给项目处理器时,我得到了这样的日志,

  • 我正在使用Spring batch编写一个批处理,并试图将一个作业参数传递给item reader bean定义,但是当我执行该批处理时,我总是得到以下错误: 我只是不知道我做错了什么,因为根据我在网上发现的文档和其他帖子,一切似乎都很好。 编辑:我使用的是Spring 4.3.3和Spring Batch 3.0.7

  • 我正在使用注释处理来生成一些类...我有两个模块,处理器本身和使用它的“客户端”模块。我想通过客户端向处理器传递一个参数,我可以这样做 如何在处理器端检索此参数?