1.JobParameters

在调用JOB的时候设置JOB的全局参数,可在JOB执行过程的各个地方获取。

如下代码所示,在调用JOB是设置JobParameters

package com.flight.neon.batch.demo.test;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.JobParametersInvalidException;
import org.springframework.batch.core.launch.support.SimpleJobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoJobTest {@AutowiredSimpleJobLauncher jobLauncher;@AutowiredJob userJob;@Testpublic void demoTest() throws JobParametersInvalidException, JobExecutionAlreadyRunningException, JobRestartException, JobInstanceAlreadyCompleteException {String batchId = "test-model";JobParameters jobParameters = new JobParametersBuilder().addString("batchId", batchId).toJobParameters();jobLauncher.run(userJob, jobParameters);}}

在process中可以通过注解的方式获取参数值(JOB中的其他步骤也可通过这种方法获取参数值)

package com.flight.neon.batch.demo.job.processor;import com.flight.neon.batch.demo.job.entity.User;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @author 这个码农不太萌*/
@Component
public class DemoProcess {@StepScope@Bean("userProcess")public ItemProcessor<User, User> userProcess(@Value("#{jobParameters['batchId']}") String batchId) {ItemProcessor<User, User> itemProcessor = ehrOrg -> {//数据处理return ehrOrg;};return itemProcessor;}}

2.jobExecutionContext

jobExecutionContext是全局的job上下文数据,可以通过jobExecution或者value注解的方式获取

如下给JOB定义一个监听,并在监听中塞值取值

package com.flight.neon.batch.demo.job.listener;import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobExecutionListener;
import org.springframework.stereotype.Component;/*** @author 这个码农不太萌*/
@Component
public class DemoJobListener implements JobExecutionListener {@Overridepublic void beforeJob(JobExecution jobExecution) {jobExecution.getExecutionContext().put("test-job-context","aaaaa");}@Overridepublic void afterJob(JobExecution jobExecution) {System.out.println(jobExecution.getExecutionContext().get("test-job-context"));}
}

如下在process中通过value注解取值

package com.flight.neon.batch.demo.job.processor;import com.flight.neon.batch.demo.job.entity.User;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.item.ItemProcessor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;/*** @author 这个码农不太萌*/
@Component
public class DemoProcess {@StepScope@Bean("userProcess")public ItemProcessor<User, User> userProcess(@Value("#{jobParameters['batchId']}") String batchId,@Value("#{jobExecutionContext['test-job-context']}") String jobContext) {System.out.println("jobParameters is" + batchId);System.out.println("jobExecution is" + jobContext);ItemProcessor<User, User> itemProcessor = ehrOrg -> {//数据处理return ehrOrg;};return itemProcessor;}}

3.stepExecutionContext

stepExecutionContext与jobExecutionContext基本类似,只不过stepExecutionContext是在单个step中可见的,jobExecutionContext是job全局可见的

总结:

spirng-batch传值基本就这三种,按业务场景需要使用。需要注意的是,每个值获取的代码链路必须加上@StepScope注解才能进行注解形式的值获取

spring-batch参数传递相关推荐

  1. mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用

    mongodb json 总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换 ...

  2. 在MongoDB和Spring Batch中将XML转换为JSON和原始使用

    总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON. 某些应用程序 ...

  3. Spring Batch教程–最终指南

    这是Spring批处理教程,它是Spring框架的一部分. Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动, ...

  4. spring Batch实现数据库大数据量读写

    spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理  1. data-source-context.xml Xml代码   &l ...

  5. Spring Batch在大型企业中的最佳实践

    在大型企业中,由于业务复杂.数据量大.数据格式不同.数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理.而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理.这样的过程就是" ...

  6. java中batch基础_详解Spring batch 入门学习教程(附源码)

    详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...

  7. 首次使用批处理框架 Spring Batch ,被震撼到了,太强大...

    以下文章来源方志朋的博客,回复"666"获面试宝典 spring batch简介 spring batch是spring提供的一个数据处理框架.企业域中的许多应用程序需要批量处理才 ...

  8. 配置 Spring Batch 批处理失败重试

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 引言 默认情况下,Spring批处理作业在执行过程中 ...

  9. Spring Batch 介绍

    在企业应用的关键环境中,通常有需要很多应用来来处理大量的应用.这商业操作包括了自动化,并且负责的处理程序来对大量数据进行高效的处理,通常这些程序不需要人工进行干预.这些事件包括有基于时间周期产生的操作 ...

  10. java批处理框架采集端_使用Spring Batch批处理框架(参考)

    本文主要介绍了春季批量框架的使用分析.文章通过实例代码详细介绍,对每个人的学习或工作都有一定的参考和学习价值,需要的朋友可以参考. 使用春季批处理作为批处理框架,可以在常规数据量不是特别大的情况下完成 ...

最新文章

  1. 【Android 组件化】路由组件 ( 生成 Root 类记录模块中的路由表 )
  2. 去掉PE文件随机基址的方法
  3. python request is not defined_python引入requests模块报错
  4. 获取DOM元素方法小结
  5. 基于Arweave的文件同步应用ArDrive完成160万美元融资
  6. 程序防止SqlServer使用SqlServer Profiler跟踪
  7. HTML5项目笔记8:使用HTML5 的跨域通信机制进行数据同步
  8. CTS2019朝圣 x 打铁记
  9. [生存志] 第39节 郑伯克段于鄢
  10. Elasticsearch应用案例1:百度
  11. STM32开发 | AD7606并行多路采集数据
  12. 不必担心安卓系统被植入棱镜
  13. 整顿风暴后网址导航将何去何从 如何孕育重生
  14. varnish 高性能加速器
  15. 【重磅盘点】62种PCB板不良实例的原因分析及规避措施!必收藏干货!
  16. 图片转pdf、长图转pdf
  17. android zooming bitmap
  18. Snipaste截图界大咖
  19. 【10】AccessibilityService实现探探app的自动化喜欢和不喜欢+ [as 3.0如何打开层级调用uiautomatorviewer]
  20. 数据库多维度order by 排序分析

热门文章

  1. 定期存款计算器_定期存款预测
  2. 瑜岿科技综合能源管理系统助力企业节能降耗工作
  3. 数值计算方法迭代法matlab实现
  4. 大学生实习行为十要(转)
  5. heritrix3.1.0增量爬取
  6. 报错“Connection failure occurred.Restarting subscription task after 5000 ms“解决
  7. 教你用Qt手写优酷客户端界面
  8. MNIST数据集的导入与预处理
  9. Servlet实现用户注册
  10. CPU虚拟化的三种技术