文档章节

Spring Batch_JobParameters

秋风醉了
 秋风醉了
发布于 2014/11/12 13:38
字数 637
阅读 475
收藏 1

Spring Batch_JobParameters


spring batch的JobParameters是设置job运行的参数,同时也具有标志job的作用,就是判断两个job是不是同一个job( "how is one JobInstance distinguished from another?" The answer is: JobParameters. JobParameters is a set of parameters used to start a batch job.)。

JobParameter 就支持这四种类型

`STRING_VAL` varchar(250) DEFAULT NULL,

`DATE_VAL` datetime DEFAULT NULL,

`LONG_VAL` bigint(20) DEFAULT NULL,

`DOUBLE_VAL` double DEFAULT NULL,

这些参数都会存储在batch_job_execution_params表中,看一下该表的表结果:

CREATE TABLE `batch_job_execution_params` (
  `JOB_EXECUTION_ID` bigint(20) NOT NULL,
  `TYPE_CD` varchar(6) NOT NULL,
  `KEY_NAME` varchar(100) NOT NULL,
  `STRING_VAL` varchar(250) DEFAULT NULL,
  `DATE_VAL` datetime DEFAULT NULL,
  `LONG_VAL` bigint(20) DEFAULT NULL,
  `DOUBLE_VAL` double DEFAULT NULL,
  `IDENTIFYING` char(1) NOT NULL,
  KEY `JOB_EXEC_PARAMS_FK` (`JOB_EXECUTION_ID`),
  CONSTRAINT `JOB_EXEC_PARAMS_FK` FOREIGN KEY (`JOB_EXECUTION_ID`) REFERENCES `batch_job_execution` (`JOB_EXECUTION_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1

CONSTRAINT `JOB_EXEC_PARAMS_FK` FOREIGN KEY (`JOB_EXECUTION_ID`) REFERENCES `batch_job_execution` (`JOB_EXECUTION_ID`)

JOB_EXECUTION_ID既是主键,也是外键,关联于一个job execution,job execution 对 job param 是一对多的关系。

以上一个例子为基础,http://my.oschina.net/xinxingegeya/blog/343190

看一下job param的用法和用处

AppMain2.java

package com.lyx.batch;

import java.util.Date;

import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.JobParametersInvalidException;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.batch.core.repository.JobExecutionAlreadyRunningException;
import org.springframework.batch.core.repository.JobInstanceAlreadyCompleteException;
import org.springframework.batch.core.repository.JobRestartException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AppMain2 {

	public static void main(String[] args)
			throws JobExecutionAlreadyRunningException, JobRestartException,
			JobInstanceAlreadyCompleteException, JobParametersInvalidException {
		// TODO Auto-generated method stub
		@SuppressWarnings("resource")
		ApplicationContext context = new ClassPathXmlApplicationContext(
				new String[] { "classpath:spring-batch3.xml" });
		JobParametersBuilder jobParametersBuilder = new JobParametersBuilder();
		// 设置JobParameter
		jobParametersBuilder.addDate("date", new Date())
				.addString("hello", "world").addDouble("cost", 12.12);

		Job job = (Job) context.getBean("addPeopleDescJob");
		JobLauncher launcher = (JobLauncher) context.getBean("jobLauncher");
		JobExecution result = launcher.run(job,
				jobParametersBuilder.toJobParameters());
		ExitStatus es = result.getExitStatus();
		if (es.getExitCode().equals(ExitStatus.COMPLETED.getExitCode())) {
			System.out.println("任务正常完成");
		} else {
			System.out.println("任务失败,exitCode=" + es.getExitCode());
		}
	}

}

以下代码是设置job param的,可以看到我设置了三个参数:

// 设置JobParameter
jobParametersBuilder.addDate("date", new Date())
		.addString("hello", "world").addDouble("cost", 12.12);

我先把spring batch已有的表数据清空,如下:

-- init spring batch database
SET FOREIGN_KEY_CHECKS=0;
truncate batch_job_execution;
truncate batch_job_execution_context;
truncate batch_job_execution_params;
truncate batch_job_execution_seq;
truncate batch_job_instance;
truncate batch_job_seq;
truncate batch_step_execution;
truncate batch_step_execution_context;
truncate batch_step_execution_seq;

在以上参数的基础上,运行一下job,最后查询一下batch_job_execution_params表,可以看到如下:

JOB_EXECUTION_ID  TYPE_CD  KEY_NAME  STRING_VAL  DATE_VAL             LONG_VAL  DOUBLE_VAL  IDENTIFYING  
----------------  -------  --------  ----------  -------------------  --------  ----------  -----------  
0                 DATE     date                  2014-11-12 11:11:53  0         0.0         Y            
0                 STRING   hello     world       1970-01-01 08:00:00  0         0.0         Y            
0                 DOUBLE   cost                  1970-01-01 08:00:00  0         12.12       Y

可以看到date,hello,cost参数都持久化到了该表中,那么如何使用JobParameters


请看下一篇文章:http://my.oschina.net/xinxingegeya/blog/343509

这样使用:

#{jobParameters['input.file.name']}

Often in a batch setting it is preferable to parameterize the file name in the JobParameters of the job, instead of through system properties, and access them that way. To accomplish this, Spring Batch allows for the late binding of various Job and Step attributes:

<bean id="flatFileItemReader" scope="step"
      class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="resource" value="#{jobParameters['input.file.name']}" />
</bean>

Both the JobExecution and StepExecution level ExecutionContext can be accessed in the same way:

<bean id="flatFileItemReader" scope="step"
      class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="resource" value="#{jobExecutionContext['input.file.name']}" />
</bean>

<bean id="flatFileItemReader" scope="step"
      class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="resource" value="#{stepExecutionContext['input.file.name']}" />
</bean>

============END============

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 236
博文 577
码字总数 418437
作品 0
朝阳
程序员
Spring Batch 之 JobParameters (十)

继续前面关于Spring Batch系列的文章,本文主要介绍与JobParameters相关的一些知识。 一、JobParameters 顾名思义,所谓JobParameters,就是Job运行时的参数。它在bath中有两个作用:一是标示...

长平狐
2012/08/27
1K
1
Spring Batch_使用多线程运行一组JOB

Spring Batch_使用多线程运行一组JOB 主要思路:在spring batch中,一个job会完成一个任务,处理一个数据集,有时这个数据集会很大,导致运行时间很长(虽然做了各种优化,数据库访问的优化,...

秋风醉了
2014/11/12
0
0
Spring Batch 2.0.0.M4 和 1.1.4.RELEASE 发布

此处发布的两个版本中,1.1.4 是一个补丁修正版本,没有增加任何新的特性。而 2.0.0.M4 版本增加了 JobParameters 和 ExecutionContext 的后期绑定以及新的 Partitioning SPI ;另外所有的例...

红薯
2009/02/04
297
0
Spring Batch 快速入门

Spring Batch 是用来处理大量数据操作的框架,主要用来读取大量数据,然后进行一定处理后输出成指定的形式。 Spring Batch 主要组成部分 JobRepository:用来注册Job的容器 JobLauncher:用来...

慕容若冰
2016/12/09
85
0
spring batch 分页读取数据

使用org.springframework.batch.item.database.JdbcPagingItemReader 读取数据, 配置如下:

chenlei65368
2013/07/25
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 毒蛇当辣条

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 达尔文:分享花澤香菜/前野智昭/小野大輔/井上喜久子的单曲《ミッション! 健?康?第?イチ》 《ミッション! 健?康?第?イチ》- 花澤香菜/前野智...

小小编辑
49分钟前
4
1
java -jar运行内存设置

java -Xms64m #JVM启动时的初始堆大小 -Xmx128m #最大堆大小 -Xmn64m #年轻代的大小,其余的空间是老年代 -XX:MaxMetaspaceSize=128m # -XX:CompressedClassSpaceSize=6...

李玉长
今天
1
0
Spring | 手把手教你SSM最优雅的整合方式

HEY 本节主要内容为:基于Spring从0到1搭建一个web工程,适合初学者,Java初级开发者。欢迎与我交流。 MODULE 新建一个Maven工程。 不论你是什么工具,选这个就可以了,然后next,直至finis...

冯文议
今天
1
0
RxJS的另外四种实现方式(四)——性能最高的库(续)

接上一篇RxJS的另外四种实现方式(三)——性能最高的库 上一篇文章我展示了这个最高性能库的实现方法。下面我介绍一下这个性能提升的秘密。 首先,为了弄清楚Most库究竟为何如此快,我必须借...

一个灰
今天
1
0
麒麟AI首席科学家现世

8月31日,华为发布了新一代顶级人工智能手机芯片麒麟980,成为全球首款7nm工艺手机芯片,AI方面也实现飞跃,支持人脸识别、物体识别、物体检测、图像分割、智能翻译等。 虽然如今人人都在热议...

问题终结者
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部