spring-batch DefaultJobParametersExtractor 源码
spring-batch DefaultJobParametersExtractor 代码
文件路径:/spring-batch-core/src/main/java/org/springframework/batch/core/step/job/DefaultJobParametersExtractor.java
/*
* Copyright 2006-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.batch.core.step.job;
import java.util.Arrays;
import java.util.Date;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.JobParameter;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.StepExecution;
import org.springframework.batch.item.ExecutionContext;
/**
* Simple implementation of {@link JobParametersExtractor} which pulls parameters with
* named keys out of the step execution context and the job parameters of the surrounding
* job.
*
* @author Dave Syer
* @author Will Schipp
*
*/
public class DefaultJobParametersExtractor implements JobParametersExtractor {
private Set<String> keys = new HashSet<>();
private boolean useAllParentParameters = true;
/**
* The key names to pull out of the execution context or job parameters, if they
* exist. If a key doesn't exist in the execution context then the job parameters from
* the enclosing job execution are tried, and if there is nothing there either then no
* parameter is extracted. Key names ending with <code>(long)</code>,
* <code>(int)</code>, <code>(double)</code>, <code>(date)</code> or
* <code>(string)</code> will be assumed to refer to values of the respective type and
* assigned to job parameters accordingly (there will be an error if they are not of
* the right type). Without a special suffix in that form a parameter is assumed to be
* of type String.
* @param keys the keys to set
*/
public void setKeys(String[] keys) {
this.keys = new HashSet<>(Arrays.asList(keys));
}
/**
* @see JobParametersExtractor#getJobParameters(Job, StepExecution)
*/
@Override
public JobParameters getJobParameters(Job job, StepExecution stepExecution) {
JobParametersBuilder builder = new JobParametersBuilder();
Map<String, JobParameter> jobParameters = stepExecution.getJobParameters().getParameters();
ExecutionContext executionContext = stepExecution.getExecutionContext();
if (useAllParentParameters) {
for (String key : jobParameters.keySet()) {
builder.addParameter(key, jobParameters.get(key));
}
}
for (String key : keys) {
if (key.endsWith("(long)")) {
key = key.replace("(long)", "");
if (executionContext.containsKey(key)) {
builder.addLong(key, executionContext.getLong(key));
}
else if (jobParameters.containsKey(key)) {
builder.addLong(key, (Long) jobParameters.get(key).getValue());
}
}
else if (key.endsWith("(int)")) {
key = key.replace("(int)", "");
if (executionContext.containsKey(key)) {
builder.addLong(key, (long) executionContext.getInt(key));
}
else if (jobParameters.containsKey(key)) {
builder.addLong(key, (Long) jobParameters.get(key).getValue());
}
}
else if (key.endsWith("(double)")) {
key = key.replace("(double)", "");
if (executionContext.containsKey(key)) {
builder.addDouble(key, executionContext.getDouble(key));
}
else if (jobParameters.containsKey(key)) {
builder.addDouble(key, (Double) jobParameters.get(key).getValue());
}
}
else if (key.endsWith("(string)")) {
key = key.replace("(string)", "");
if (executionContext.containsKey(key)) {
builder.addString(key, executionContext.getString(key));
}
else if (jobParameters.containsKey(key)) {
builder.addString(key, (String) jobParameters.get(key).getValue());
}
}
else if (key.endsWith("(date)")) {
key = key.replace("(date)", "");
if (executionContext.containsKey(key)) {
builder.addDate(key, (Date) executionContext.get(key));
}
else if (jobParameters.containsKey(key)) {
builder.addDate(key, (Date) jobParameters.get(key).getValue());
}
}
else {
if (executionContext.containsKey(key)) {
builder.addString(key, executionContext.get(key).toString());
}
else if (jobParameters.containsKey(key)) {
builder.addString(key, jobParameters.get(key).getValue().toString());
}
}
}
return builder.toJobParameters();
}
/**
* setter to support switching off all parent parameters
* @param useAllParentParameters if false do not include parent parameters. True if
* all parent parameters need to be included.
*/
public void setUseAllParentParameters(boolean useAllParentParameters) {
this.useAllParentParameters = useAllParentParameters;
}
}
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦