一、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。
jdbcbatchitemwriter:将item对象转换为数据库记录。