spring-batch多线程开启
通过之前的介绍,大姐对spring-batch有了一定的了解。但是当数据量达到十万级时,我们发现之前的JOB运行时间还是比较长的。spring-batch优化效率可以直接在step中打开spring的多线程,进行多线程运行。当打开多线程之后,十万级的数据运行可以在秒级运行完毕。打开多线程分两步,1.关闭读取中的状态记录2.开启spring的多线程代码如下@Bean("userReader")pub
·
通过之前的介绍,大姐对spring-batch有了一定的了解。但是当数据量达到十万级时,我们发现之前的JOB运行时间还是比较长的。
spring-batch优化效率可以直接在step中打开spring的多线程,进行多线程运行。当打开多线程之后,十万级的数据运行可以在秒级运行完毕。
打开多线程分两步,1.关闭读取中的状态记录 2.开启spring的多线程 代码如下
@Bean("userReader")
public FlatFileItemReader<User> userReader(){
ClassPathResource classPathResource = new ClassPathResource("text/user.txt");
FlatFileItemReader<User> flatFileItemReader = new FlatFileItemReader<>();
flatFileItemReader.setResource(classPathResource);
//设置跳过行数
flatFileItemReader.setLinesToSkip(1);
//数据转换
DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
tokenizer.setNames(new String[]{"userId","userName"});
DefaultLineMapper<User> defaultLineMapper = new DefaultLineMapper<>();
defaultLineMapper.setLineTokenizer(tokenizer);
defaultLineMapper.setFieldSetMapper(fieldSet -> {
User user = new User();
user.setUserId(fieldSet.readString("userId"));
user.setUserName(fieldSet.readString("userName"));
return user;
});
defaultLineMapper.afterPropertiesSet();
//关闭状态记录
flatFileItemReader.setSaveState(false);
flatFileItemReader.setLineMapper(defaultLineMapper);
return flatFileItemReader;
}
@StepScope
@Bean
public Step userStep() {
return stepBuilderFactory.get("userStep")
.<User,User>chunk(2)
.reader(userReader)
.processor(userProcess)
.writer(userWriter)
//打开spring多线程
.taskExecutor(new SimpleAsyncTaskExecutor())
.build();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)