spring-batch多线程开启

本文介绍了如何通过Spring Batch的多线程优化,关闭状态记录并开启任务执行器,使得处理十万级数据的时间大大缩短。详细步骤包括配置FlatFileItemReader和开启step级别的多线程处理。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

这个码农不太萌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值