spring batch简单实例分享

KLQ 2020-08-12 14:19:25 java常见问答 8307

对于spring batch是什么你应该都很清楚了吧,那么下面要给大家介绍的就是spring batch的简单例子,一起通过下文来进行了解吧。

1、程序随机生成字符串,经过spring batch之后,统一在字符串后加入“----PROCESSED”,并输出。

2、程序读取txt文件,经过spring batch后,统一加入如上字段,并输出。

spring batch流程:读取数据----itemReader-处理数据----itemProcess-数据写入----itemWrite。

通过分析目标可以知道,两个两个目标的输入数据源不同,处理方式基本上是相同的,,数据完成之后写入规则一致,由此的话可以分段完成代码。

itemReader

这里的话没有使用Spring Batch自带的集中reader,所以就自定义了随机生成字符串的reader,这里的代码有点不够完善,reader会无线循环生成随机字符串,但是这些影响不大。

public class MyItemReader implements ItemReader < String >
{
    @Override
    public String read() throws Exception
    , UnexpectedInputException
    , ParseException
    , NonTransientResourceException
    {
        return RandomStringUtils.randomAlphabetic(10);
    }
}

因为,是读取文件中的内容,所以不用自定义reader实现。

直接使用FlatFileItemReader,在Batch的config中配置就可以了。

@Bean
public ItemReader < String > textReader()
{
    FlatFileItemReader < String > reader = new FlatFileItemReader < > ();
    File file = new File("D:\\FTP\\ttest.txt");
    reader.setResource(new FileSystemResource(file));
    reader.setLineMapper(new LineMapper < String > ()
    {
        @Override
        public String mapLine(String line, int lineNumber) throws Exception
        {
            return line;
        }
    });
    return reader;
}

itemProcess

这里的话,使用同一种处理方式。

public class MyItemProcessor implements ItemProcessor < String, String >
{
    @Override
    public String process(String s) throws Exception
    {
        return s + "---------PROCESSED";
    }
}

itemWriter

使用同一种处理方式。

public class MyItemWriter implements ItemWriter < String >
{
    @Override
    public void write(List < ? extends String > items) throws Exception
    {
        for (String item: items)
        {
            System.out.println(item);
        }
    }
}

配置完成Batch Config

@Configuration
@EnableBatchProcessing
public class BatchConfiguration extends DefaultBatchConfigurer
{
    @Autowired
    public StepBuilderFactory stepBuilderFactory;
    @Autowired
    public JobBuilderFactory jobBuilderFactory;
    @Bean
    public MyItemProcessor processor()
    {
        return new MyItemProcessor();
    }
    @Bean
    public ItemWriter < String > writer()
    {
        return new MyItemWriter();
    }
    @Bean
    public ItemReader < String > textReader()
    {
        FlatFileItemReader < String > reader = new FlatFileItemReader < > ();
        File file = new File("D:\\FTP\\ttest.txt");
        reader.setResource(new FileSystemResource(file));
        reader.setLineMapper(new LineMapper < String > ()
        {
            @Override
            public String mapLine(String line, int lineNumber) throws Exception
            {
                return line;
            }
        });
        return reader;
    }
    @Bean
    public ItemReader < String > stringReader()
    {
        return new MyItemReader();
    }
    @Override
    public void setDataSource(DataSource dataSource)
    {
        super.setDataSource(dataSource);
    }
    @Bean
    public Step myStep()
    {
        return stepBuilderFactory
            .get("step1")
            //这个chunk size是最后调用写入的时候,一次性写入多少条已处理的数据
            . < String, String > chunk(10)
            //                .reader(textReader())
            .reader(stringReader())
            .processor(processor())
            .writer(writer())
            .build();
    }
    @Bean
    public Job MyJob()
    {
        return jobBuilderFactory
            .get("MyJOB")
            .listener(new JobExecutionListenerSupport()
            {
                //所有处理结束后调用
                @Override
                public void afterJob(JobExecution jobExecution)
                {
                    if (jobExecution.getStatus() == BatchStatus.COMPLETED)
                    {
                        System.out.println("OK");
                    }
                }
            })
            .flow(myStep())
            .end()
            .build();
    }
}

spring batch的简单实例就为你分享到这里了,更多实例,可以继续关注奇Q工具网的java实例栏目来了解。

推荐阅读:

springsecurity动态配置url权限如何实现?

springmvc如何实现两级联动菜单?实现方式详解

springboot配置日志如何编写?