spring-batch参数传递
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参数传递相关推荐
- mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用
mongodb json 总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换 ...
- 在MongoDB和Spring Batch中将XML转换为JSON和原始使用
总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON. 某些应用程序 ...
- Spring Batch教程–最终指南
这是Spring批处理教程,它是Spring框架的一部分. Spring Batch提供了可重用的功能,这些功能对于处理大量记录至关重要,包括日志记录/跟踪,事务管理,作业处理统计信息,作业重新启动, ...
- spring Batch实现数据库大数据量读写
spring Batch实现数据库大数据量读写 博客分类: spring springBatchquartz定时调度批处理 1. data-source-context.xml Xml代码 &l ...
- Spring Batch在大型企业中的最佳实践
在大型企业中,由于业务复杂.数据量大.数据格式不同.数据交互格式繁杂,并非所有的操作都能通过交互界面进行处理.而有一些操作需要定期读取大批量的数据,然后进行一系列的后续处理.这样的过程就是" ...
- java中batch基础_详解Spring batch 入门学习教程(附源码)
详解Spring batch 入门学习教程(附源码) 发布时间:2020-09-08 00:28:40 来源:脚本之家 阅读:99 作者:achuo Spring batch 是一个开源的批处理框架. ...
- 首次使用批处理框架 Spring Batch ,被震撼到了,太强大...
以下文章来源方志朋的博客,回复"666"获面试宝典 spring batch简介 spring batch是spring提供的一个数据处理框架.企业域中的许多应用程序需要批量处理才 ...
- 配置 Spring Batch 批处理失败重试
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 引言 默认情况下,Spring批处理作业在执行过程中 ...
- Spring Batch 介绍
在企业应用的关键环境中,通常有需要很多应用来来处理大量的应用.这商业操作包括了自动化,并且负责的处理程序来对大量数据进行高效的处理,通常这些程序不需要人工进行干预.这些事件包括有基于时间周期产生的操作 ...
- java批处理框架采集端_使用Spring Batch批处理框架(参考)
本文主要介绍了春季批量框架的使用分析.文章通过实例代码详细介绍,对每个人的学习或工作都有一定的参考和学习价值,需要的朋友可以参考. 使用春季批处理作为批处理框架,可以在常规数据量不是特别大的情况下完成 ...
最新文章
- 【Android 组件化】路由组件 ( 生成 Root 类记录模块中的路由表 )
- 去掉PE文件随机基址的方法
- python request is not defined_python引入requests模块报错
- 获取DOM元素方法小结
- 基于Arweave的文件同步应用ArDrive完成160万美元融资
- 程序防止SqlServer使用SqlServer Profiler跟踪
- HTML5项目笔记8:使用HTML5 的跨域通信机制进行数据同步
- CTS2019朝圣 x 打铁记
- [生存志] 第39节 郑伯克段于鄢
- Elasticsearch应用案例1:百度
- STM32开发 | AD7606并行多路采集数据
- 不必担心安卓系统被植入棱镜
- 整顿风暴后网址导航将何去何从 如何孕育重生
- varnish 高性能加速器
- 【重磅盘点】62种PCB板不良实例的原因分析及规避措施!必收藏干货!
- 图片转pdf、长图转pdf
- android zooming bitmap
- Snipaste截图界大咖
- 【10】AccessibilityService实现探探app的自动化喜欢和不喜欢+ [as 3.0如何打开层级调用uiautomatorviewer]
- 数据库多维度order by 排序分析