首页 > 其他分享 >SpringBatch 框架

SpringBatch 框架

时间:2022-11-23 10:26:17浏览次数:74  
标签:框架 批处理 job workStep SpringBatch public

SpringBatch 是一个轻量级的、完善的批处理框架,旨在帮助企业建立健壮、高效的批处理应用。它是一个批处理应用框架,不是调度框架,需要配合调度框架来完成批处理工作。

这里不会介绍 SpringBatch 的基本概念,仅仅记录一些使用技巧和模板。

对单个 job 进行单元测试

1.pom.xml 引入测试框架

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-test</artifactId>
</dependency>

2.配置文件设置 job 不自动运行

spring.batch.job.enabled=false

3.单元测试类

@SpringBootTest
public class BatchTest {

    @Autowired
    private JobLauncher simpleJobLauncher;
    @Autowired
    private Job testJob;
    @Autowired
    private ExecutionContext executionContext;

    @Test
    public void test() throws Exception {
		// 参数
        JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
        jobParametersBuilder.addString("tableName", "foo");
        jobParametersBuilder.addDate("date", new Date());

		// context 上下文
        TestJobContext context = TestJobContext.builder().name("chenglong").userId("1").build();
        executionContext.put("context", context);

        simpleJobLauncher.run(testJob, jobParametersBuilder.toJobParameters());
    }
}

基本框架模板

这里介绍一种使用 SpringBatch 的基本套路

@Qualifier("testJob")
@Bean
public Job job() throws Exception {
    return jobBuilderFactory.get("job")
            .validator(jobParamValidator)
            .start(initOperatorStep())
            .next(myDecider)
            .on("runNext")
            .to(workStep())
            .end()
            .build();
}

@Bean
public Step workStep() throws Exception {
    return stepBuilderFactory.get("workStep")
            .<Foo, Bar>chunk(10)
            .reader(dataSourceItemReader())
            .processor(testProcessor)
            .writer(dataSourceItemWriter(null))
            .build();
}

@Bean
public Step initOperatorStep() {
    return stepBuilderFactory.get("initOperatorStep").tasklet((contribution, chunkContext) -> null).build();
}

首先使用 jobParamValidator 对参数进行校验。

initOperatorStep 是运行时准备的代码,比如对任务进行记录,参数的组装等工作,它是一个 tasklet,有非常大的自定义的空间。

myDecider 是决策器,可以决定是否进一步执行下一步操作,比如有些定时任务只有满足特定条件才会真正进行,在这里就可以进行过滤。这里当决策器返回 runNext 字符串的时候就继续执行 workStep 否则结束流程。

workStep 就是一个非常常规的 SpringBatch 批处理的模式,使用 chunk 模式,reader 后进行 processor 最后再进行写操作。

一些小问题

@StepScope 注解

在 Spring 框架中 @Bean 注解的类生命周期是和 Spring 绑定的,一般 IoC 容器都会默认使用 singleton 作为 bean 的作用范围。

这就导致了 job 的底层单位(reader,processor,writer,tasklet)在 job 启动后就参数就没有办法修改,所以有了这个 scope,来标记当前 bean 的生命周期和 step 同步。

完整代码:https://gitee.com/ManaStuDent/project 4play分支 op-batch模块

标签:框架,批处理,job,workStep,SpringBatch,public
From: https://www.cnblogs.com/manastudent/p/16917411.html

相关文章

  • 001. MyBatis介绍---01框架的作用
    1.软件开发中的框架  2.框架的优点  3.SSM框架 ......
  • Android网络请求(3) 网络请求框架OkHttp
    Android网络请求(3) 网络请求框架OkHttp本节我们来讲解OkHtpp网络请求框架什么是网络请求框架在我的理解中,网络请求框架是为了方便我们更加便捷规范的进行网络请求所建......
  • freecplus框架简介
    文章目录​​一、freecplus框架简介​​​​二、freecplus开源许可协议​​​​三、freecplus框架内容​​​​字符串操作​​​​2、xml解析​​​​3、日期时间​​​​4......
  • freecplus框架-MySQL数据库操作
    文章目录​​一、源代码说明​​​​二、概述​​​​三、connection类​​​​四、sqlstatement类​​​​五、程序流程​​​​1、无结果集SQL的程序的流程​​​​2、有......
  • freecplus框架-Oracle数据库操作
    文章目录​​一、源代码说明​​​​二、概述​​​​三、connection类​​​​四、sqlstatement类​​​​五、程序流程​​​​1、无结果集SQL的程序的流程​​​​2、有......
  • freecplus框架-tcp网络通信
    文章目录​​一、源代码说明​​​​二、概述​​​​三、通信的报文格式​​​​四、socket通信客户端​​​​五、socket通信的服务端​​​​六、示例程序​​​​1、客......
  • freecplus框架-加载参数文件
    文章目录​​一、源代码说明​​​​二、参数文件的意义​​​​三、CIniFile类​​​​1、类的声明​​​​2、示例程序​​​​四、获取视频教程​​​​五、版权声明​​......
  • freecplus框架-文件操作
    文章目录​​一、源代码说明​​​​二、文件操作函数​​​​1、删除文件​​​​2、文件重命名​​​​3、复制文件​​​​4、获取文件的大小​​​​5、获取文件的时间......
  • freecplus框架-日志文件操作
    文章目录​​一、源代码说明​​​​二、日志文件的意义​​​​三、CLogFile类​​​​1、类的声明​​​​2、示例程序​​​​3、日志文件的切换​​​​四、获取视频教......
  • 关于若依框架后台数据库中午乱码 MySQL8.0 中文乱码
    --查看字符集编码设置为以下showVARIABLESlike'CHARACTER%'setcharacter_set_results=utf8mb4;character_set_client utf8mb4character_set_connection utf8......