1、这个东西要用到几个东西:
1、定时任务;
2、数据读取器;
3、数据处理器;
4、数据写入处理器;
在以上基础上 需要编写一个批处理的配置类, 这个配置类时用来做开启批处理的开关(
@EnableBatchProcessing
)
在配置类中编写一个创建 读取器的初始化代码逻辑;
@Bean
public IReader iReader(@Value(#{jobParameters['id']}) Long id, @Value(#{jobParameters['status']}) Long status) {
IReader ireader = new IReader();
//设置属性值 设置批属性的大小
return ireader;
}
在配置类中编写一个创建 处理器的初始化代码逻辑;
@Bean
public IProcessor iProcessor() {
return new IProcessor ();
}
在配置类中编写一个创建 写入器的初始化代码逻辑;
@Bean
public IWriter iWriter() {
return new IWriter();
}
在配置类中编写一个创建 步骤器的初始化代码逻辑;
@Bean
public IStep iStepor(
StepBuilderFactory builder, IReader iReader, IProcessor iProcessor , IWriter iWriter, DataSourceTransactionManager transactionManager
) {
return builder.get("iStepor") .<Entity, Entity>chunk(batchSize) .reader(iReader).faultTolerant().retryLimit(3).retry(Exception.class).skip(Exception.class).skipLimit(10) .processor(iProcessor ) .writer(iWriter).faultTolerant().skip(Exception.class).skipLimit(10) .transactionManager(transactionManager) .build();
}
注:在上面的step初始化中,读取器,以及处理器,写入器 实例不是必要初始化的,可以直接用一个方法来进行实现,如果要让代码结构好,以及可扩展,
那么对应的读取器需要继承 :AbstractPagingItemReader;
处理器实现: ItemProcessor
写入器需要实现:ItemWriter
在配置类中编写一个创建 任务执行器的初始化代码逻辑;
@Bean
public IJobor iJober() {
return builder.get("iJober") .incrementer(new RunIdIncrementer()) .flow(iStepor) .end() .build();
}
初始化事务管理器 如果spring容器中不存在的话
@Bean @ConditionalOnMissingBean(DataSourceTransactionManager.class) public DataSourceTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); }
调用客户端
@Autowired private JobLauncher jobLauncher; 初始化任务器执行器 @Autowired private Job iJob; 初始化任务
任务参数构造器
JobParametersBuilder builder = new JobParametersBuilder();
启动任务 jobLauncher.run(iJob, builder.toJobParameters());
工程启动类需要加上注解:@EnableScheduling