一、springbatch入门程序

@Configuration
@EnableBatchProcessing//开启springbatch,也可以在启动程序中开启
public class JobConfiguration {
    // 框架可以直接注入创建任务对象的对象
    @Autowired
    private JobBuilderFactory jobBuilderFactory;

    //框架可以直接注入,任务的执行由Step决定,注入创建Step对象的对象
    
    @Autowired
    private StepBuilderFactory stepBuilderFactory;

    @Bean
    //创建任务对象
    public Job helloWorldJob() {
        //job名字//开始step
        return jobBuilderFactory.get("helloWorldJob")
                .start(step1())
                .build();
    }

    @Bean
    public Step step1() {
        //step1 step的名字,tasklet执行任务 可以用chunk
        return stepBuilderFactory.get("step1")
                .tasklet(new Tasklet() {
                    @Override
                    //RepeatStatus 状态值,一步步来,一个step结束开始下一个
                    public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) throws Exception {
                        System.out.println("He11o World!");
                        return RepeatStatus.FINISHED;
                    }

                }).build();
    }
}

二、替换为MySQL数据库

<dependency>
	<groupId>mysq1</groupId>
	<artifactId>mysql-connector-java</artifactId> 
</dependency> 
<dependency>
	<groupId>ore.springframework.boot</groupId>
	<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>

设置数据库:

application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/batch
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.schema=classpath:/org/springframework/batch/core/schema-mysql.sql
//项目启动时执行建表 SQL
spring.batch.initialize-schema=always

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

spring.batch.job.enabled=false

默认情况,项目启动时自动执行配置好的批处理操作。这里将器设为不自动执行,需要joblacuncher启动

三、核心API

1.JobInstance:工作流程中的一个具体实例,一个Job可以有多个JobInstance。

2.JobParameters:Job运行时的配置参数。JobInstance=Job+JobParameters

3.JobExection:jobinstace:运行时都会产生1个Jobexection。运行时间、开始结束、状态、成功与否。

4.stepexection:执行一次step都会创建一个新的Stepecextion,可能由于步骤失败无法执行,只有step实际启动时才会创建stepexection。每个stepexecution都包含对其相应步骤的引用,以及Jobexection和事务相关的数据。例如:提交和回滚计数以及开始和结束时间。且每个步骤包含一个一个executioncontext,其中包含开发人员需要在批处理运行中保留的任何数据,例如重新启动所需的统计信息或状态信息。

5.executioncontext:每个stepexection的执行环境,一系列键值对。

6.jobrepository:将job、step进行持久化的一个类,首次启动job,将从repository获取jobexection,并且执行批处理的过程中,stepexection和jobexecution将被存储到repository当中。

@EnableBatchProcessing注解可以为JobRepository提供自动配置。

7.Joblauncher:启动指定了jobparameters的job。只有jobparameter和job组合才是一次job的执行。

8.Item reader:读数据的抽象,功能:为每一个step提供数据输入。当itemReader读完数据后,会返回null说明后续数据已经读完。springbatch为itemreader提供了很多实现类:jdbcPagingItemReader、jdbcCursorItemReader、JpaPagingItemReader、JpaCursorItemReader、MybatisCursorItemReader、MybatisPagingItemReader。

jdbcPagingItemReader:对jdbc分页读取。作用:将数据库中的记录通过分页的方式转换为Java对象。

jdbcCursorItemReader:对jdbc读取。作用:将数据库中的记录转换为Java对象。

JpaPagingItemReader:将数据库中的记录通过ORM的分页方式转换为java Bean对象。

9.item processor:对项目的业务逻辑处理的一个抽象,当itemreader读取了一条记录,对数据进行操作,处理业务逻辑,之后可以通过itemwriter进行写入。

10.Item writer:写数据的抽象,可以每次一条,也可以每次写一个chunk。

springbatch开启自动建表_java

 jdbcbatchitemwriter:将item对象转换为数据库记录。