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

Spring boot批处理调度程序运行一次

于鸿博
2023-03-14

我在版本2.1.4中开始学习Spring Boot Batch

@Component
public class UserReaderImpl  {
    @StepScope
    public ItemReader<UserCsvStructure> read(String filepath) {
        FlatFileItemReader<UserCsvStructure> reader = new FlatFileItemReader();
        reader.setLinesToSkip(1);
        reader.setResource(new FileSystemResource(filepath));
        reader.setLineMapper(new DefaultLineMapper<UserCsvStructure>() {
            {
                setLineTokenizer(new DelimitedLineTokenizer() {
                    {
                        setNames(new String[]{"firstName","lastName","email"});
                    }
                });
                setFieldSetMapper(new BeanWrapperFieldSetMapper<UserCsvStructure>() {
                    {
                        setTargetType(UserCsvStructure.class);
                    }
                });
            }
        });
        return reader;
    }
}
@StepScope
@Component
public class UserProcessorImpl implements ItemProcessor<UserCsvStructure, User> {
@Override
public User process(UserCsvStructure userCsvStructure) throws Exception {
    return User.builder()
            .email(userCsvStructure.getEmail())
            .firstName(userCsvStructure.getFirstName())
            .lastName(userCsvStructure.getLastName())
            .build();
}
}
@Component
@StepScope
public class UserWriterImpl implements ItemWriter<User>{
@Autowired
private UserRepository userRepository;

@Override
public void write(List<? extends User> list) throws Exception {
    System.out.println(list);
    userRepository.saveAll(list);
}
}

这是我的配置

@Component
public class UserBatchCsvConfig {

@Autowired
public JobBuilderFactory jobBuilderFactory;

@Autowired
public StepBuilderFactory stepBuilderFactory;

@Autowired
private UserReaderImpl userReader;

@Autowired
private UserWriterImpl userWriter;

@Autowired
private UserProcessorImpl userProcessor;

public Job csvFileToDatabaseJob(UserJobCompletionNotificationListener listener, String fileName) {
    return jobBuilderFactory.get("userCsvProcess")
            .incrementer(new RunIdIncrementer())
            .listener(listener)
            .flow(csvFileToDatabaseStep(fileName))
            .end()
            .build();
}

private Step csvFileToDatabaseStep(String fileName) {
    return stepBuilderFactory.get("userCsvProcess")
            .<UserCsvStructure, User>chunk(1)
            .reader(userReader.read(fileName))
            .processor(userProcessor)
            .writer(userWriter)
            .build();
}

}

最后一节课是我的排定程序:

@Component
public class UserCsvProcessor {

@Autowired
private JobLauncher jobLauncher;

@Autowired
private UserBatchCsvConfig job;

@Autowired
private UserJobCompletionNotificationListener userJobCompletionNotificationListener;

@Scheduled(fixedDelay = 10000)
public void runJob() throws Exception {
    jobLauncher.run(job.csvFileToDatabaseJob(userJobCompletionNotificationListener, "C:\\Users\\Anik\\Desktop\\angular\\test.csv"), new JobParameters());
}
}

共有1个答案

柴正祥
2023-03-14

我知道我应该在UserCsvProcessor类中的代码中添加什么我需要将我的调度函数更改为:

@Scheduled(fixedDelay = 10000)
public void runJob() throws Exception {
    JobParameters params = new JobParametersBuilder()
            .addString("JobID", String.valueOf(System.currentTimeMillis()))
            .toJobParameters();
    jobLauncher.run(job.csvFileToDatabaseJob(userJobCompletionNotificationListener, "C:\\Users\\Anik\\Desktop\\angular\\test.csv"), params);
}

如果有人有其他想法或更好的想法,就加一个答案

 类似资料:
  • 是否有任何专家在使用spingdge调度程序时遇到问题? 我试着设置它在工作日的下午2点到晚上10点之间每小时运行15分钟,但是好像是按分钟触发的,这是因为我的cron出错了还是我应该做smthg来控制它? 通过springboot-web-started在linux服务器上运行 版本

  • 在一个项目中,我们必须运行一个定期开始的作业(现在QA env上每5分钟开始一次),该作业处理40K用户的一些任务。我们决定使用Spring Batch,因为它非常适合,并且几乎用默认配置实现了它(例如,它使用)。好的,有一个工作由一个步骤组成: 开箱即用 在内存中执行轻量级计算的自定义 自定义,它通过多个JPQL和本机查询将数据保存到同一个PostgreSQL db。 作业本身是用调度的,并且每

  • 我正在尝试自动登录到2008 R2服务器上的一组RDP客户端,当从桌面双击批处理文件时,下面的批处理工作正常,但是当将.bat文件设置为作为任务调度程序中的任务运行时,什么都没有发生 计划任务被设置为在管理员帐户下运行(只有一个可用),并且(开始于)可选字段也被设置为“C:\Users\Administrator\Desktop”。

  • 当我运行这段代码时,我只得到命令提示。。bat文件没有运行。如何使用这段代码执行批处理文件? 提前致谢

  • 我正在使用STS 2.81附带的Spring Batch模板和Manning的Spring Batch in Action中的示例创建一个Spring Batch作业。我可以毫无问题地执行块读取器和写入器,但我的代码跳过了处理器。我甚至尝试过在处理器中取消所有对象,但什么也没有,对象仍然设法被写入,就像处理器被忽略一样。我尝试在处理器中调用system.out.println,但没有在终端中打印出