通过之前的介绍,大姐对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();
    }

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐