【发布时间】:2019-08-01 14:49:45
【问题描述】:
我有一个作业参数验证器,其中我提到了强制和可选参数。我运行批处理并正确执行。
@Bean
public JobParametersValidator validator() {
String[] compulsoryParameters; //here I've created my compulsory parameters
String[] optionalParams ; //here I've created my optional parameters
return new DefaultJobParametersValidator(compulsoryParameters, optionalParams);
}
现在,如果我从强制参数中删除一个项目并再次运行它。它仍然要求传递相同的参数。
Caused by: org.springframework.batch.core.JobParametersInvalidException: The JobParameters contains keys that are not explicitly optional or required: [incrementerId]
at org.springframework.batch.core.job.DefaultJobParametersValidator.validate(DefaultJobParametersValidator.java:107)
at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:126)
批量配置
必填/可选参数在application.properties中配置
mybatch.batch.compulsoryParameters=name
mybatch.batch.optionalParameters=inputNumber
@Configuration
@EnableTransactionManagement
@EntityScan(basePackages = "com.something.*")
@EnableJpaRepositories(basePackages = "com.something.*")
@EnableBatchProcessing
@EnableCaching
@EnableConfigurationProperties
@Getter
@Setter
@ConfigurationProperties(prefix = "mybatch.batch", ignoreUnknownFields = false)
public class BatchConfig {
/**
* Configuration settings for the validator
*/
private String[] compulsoryParameters;
private String[] optionalParameters;
/**
* Default validator for Spring Batch
*
* @return
*/
@Bean
public JobParametersValidator validator() {
List<String> tempList = new ArrayList<>();
if (optionalParameters != null) {
Collections.addAll(tempList, optionalParameters);
}
// Adding the run.id parameter for enabling the rerun batches
tempList.add("run.id");
String[] optionalParams = new String[tempList.size()];
optionalParams = tempList.toArray(optionalParams);
return new DefaultJobParametersValidator(compulsoryParameters, optionalParams);
}
}
注意:所有作业详细信息都保存在数据库中。
【问题讨论】:
-
你能删除
@EnableCaching然后运行它吗?另外我会说将ignoreUnknownFields设为true,然后检查您是否以某种方式获得旧记录? -
不!我试过了。我遇到了同样的问题
-
旧记录检查呢?
-
旧记录检查是什么意思?我的问题是,1. 我用 3 个强制/可选参数定义了 JobParameter Validator。 2. 我使用 3 个参数运行作业 - 成功 3. 我删除了 1 个参数,现在我在 JPValidator 中有 2 个参数。 4. 我用 2 个参数运行作业 - 作业失败 它需要我在项目中没有提到的第三个参数。
-
@nmkyuppie 你现在找到解决方案了吗?
标签: spring spring-batch spring-batch-job-monitoring