文档章节

Spring Batch_JobParameters

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

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============

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 239
博文 572
码字总数 416654
作品 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
302
0
Spring Batch 之 Sample(Hello World)(三)

通过前面两篇关于Spring Batch文章的介绍,大家应该已经对Spring Batch有个初步的概念了。这篇文章,将通过一个”Hello World!”实例,和大家一起探讨关于Spring Batch的一些基本配置和实现...

长平狐
2012/08/27
807
0
Spring Batch 之 JobParameters (十)

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

长平狐
2012/08/27
1K
1
Spring Batch 之 Sample(固定长格式文件读写)(六)

前篇关于Spring Batch的文章,讲述了Spring Batch 对XML文件的读写操作。 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对固定长格式文件的读写操作。实例延续前面的例子,读取...

长平狐
2012/08/27
378
0
Spring Batch 之 Sample(复合格式文件的读、多文件的写)(七)

前面关于Spring Batch的文章,讲述了SpringBatch对CSV文件的读写操作、对XML文件的操作,以及对固定长格式文件的操作。这些事例,同一个Reader读取的都是相同格式的数据,最终写入一个文件。...

长平狐
2012/08/27
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
2
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
4
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部