我有一个工作参数验证器,其中提到了必选参数和可选参数。我运行该批处理,并且可以正确执行。
@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 =名称
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);
}
}
注意:所有作业详细信息都保留在数据库中。
答案 0 :(得分:-1)
由于错误明确指出,每个参数都必须是compulsoryParameters
或optionalParams
的一部分。
例如,对于我的工作,传递三个参数START_DATE,RUN_DATE和END_DATE。如果我从此列表中删除了一个并继续通过,则我将所有内容都包含在compulsoryParameters
中,然后错误地指出没有一个参数明确地添加到任何一个列表中。
@Bean
public JobParametersValidator validator() {
String[] compulsoryParameters = {"START_DATE", "RUN_DATE", "END_DATE"}; //here I've created my compulsory parameters
String[] optionalParams = {""}; //here I've created my optional parameters
return new DefaultJobParametersValidator(compulsoryParameters, optionalParams);
}
因此,请尝试添加通过添加到compulsoryParameters
或optionalParams
来传递的所有参数。这应该可以解决问题。