spring batch demo[极简版]

1. maven

<dependency>
	<groupId>org.springframework.batch</groupId>
	<artifactId>spring-batch-core</artifactId>
	<version>3.0.8.RELEASE</version>
</dependency>
<dependency>
	<groupId>org.springframework.batch</groupId>
	<artifactId>spring-batch-infrastructure</artifactId>
	<version>3.0.8.RELEASE</version>
</dependency>

2. BatchTest类

public class BatchTest {

    @Test
    public void test() throws Exception {
    ResourcelessTransactionManager transactionManager = new ResourcelessTransactionManager();
        MapJobRepositoryFactoryBean jobRepositoryFactoryBean = new MapJobRepositoryFactoryBean();
        jobRepositoryFactoryBean.setTransactionManager(transactionManager);
        JobRepository jobRepository = jobRepositoryFactoryBean.getObject();
        SimpleJobLauncher jobLauncher = new SimpleJobLauncher();
        jobLauncher.setJobRepository(jobRepository);

        SyncTaskExecutor taskExecutor = new SyncTaskExecutor();
        jobLauncher.setTaskExecutor(taskExecutor);

        StepBuilderFactory stepBuilderFactory = new StepBuilderFactory(jobRepository,transactionManager);
        Step step = personStep(stepBuilderFactory,reader("person.csv")
        ,new PersonWriter(), new PersonItemProcessor());

        JobBuilderFactory jobBuilderFactory = new JobBuilderFactory(jobRepository);
        Job job = jobBuilderFactory.get("job")
                .start(step)
                .build();
        jobLauncher.run(job,new JobParameters());
    }

    public ItemReader<Person> reader(String inputFile){
        if(inputFile == null)
            return null;
        FlatFileItemReader<Person> reader = new FlatFileItemReader<>();
        reader.setResource(new ClassPathResource(inputFile));
        reader.setLineMapper(lineMapper());
        reader.setLinesToSkip(1);
        ExecutionContext executionContext = new ExecutionContext();
        return reader;
    }

    public Step personStep(StepBuilderFactory stepBuilderFactory, ItemReader<Person> reader,
                           ItemWriter<Person> writer, ItemProcessor<Person,Person> processor){
        return stepBuilderFactory.get("personStep")
                .<Person,Person>chunk(1)
                .reader(reader)
                .processor(processor)
                .writer(writer)
                .build();
    }

    public LineMapper<Person> lineMapper(){
        DefaultLineMapper<Person> lineMapper = new DefaultLineMapper<>();
        DelimitedLineTokenizer lineTokenizer = new DelimitedLineTokenizer();
        lineTokenizer.setDelimiter(",");
        lineTokenizer.setStrict(false);
        lineTokenizer.setNames(new String[]{"name","age"});

        BeanWrapperFieldSetMapper<Person> fieldSetMapper = new BeanWrapperFieldSetMapper<>();
        fieldSetMapper.setTargetType(Person.class);
        lineMapper.setLineTokenizer(lineTokenizer);
        lineMapper.setFieldSetMapper(new PersonFieldSetMapper());
        return lineMapper;
    }
}

3. PersonWriter类

public class PersonWriter implements ItemWriter<Person> {
    @Override
    public void write(List<? extends Person> list) throws Exception {
        //TODO 插入数据库
        for(Person person:list){
            System.out.println(person);
        }
    }
}

4. PersonItemProcessor

public class PersonItemProcessor implements ItemProcessor<Person,Person> {

    public String inputFile;

    public PersonItemProcessor(){}

    public PersonItemProcessor(String inputFile){
        this.inputFile = inputFile;
    }

    @Override
    public Person process(Person person) {
        System.out.println("handle person " + person.getName());
        return person;
    }
}

5. PersonFieldSetMapper类

public class PersonFieldSetMapper implements FieldSetMapper<Person> {

    @Override
    public Person mapFieldSet(FieldSet fieldSet) throws BindException {
        String name = fieldSet.readRawString("name");
        int age = fieldSet.readInt("age");
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        return person;
    }
}

6. person.csv

name,age
yaoming,33

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值