Spring Batch自定义JobParametersValidator的validate方法入参为空如何解决
问题根因
你的自定义校验器拿到空参数,根本原因是Spring Boot默认自带的Job自动执行逻辑先于你自定义的TriggerJobLauncher触发了Job运行。从你的日志可以明确看到JobLauncherApplicationRunner的输出:Running default command line with: [],它执行Job时没有传入任何参数,直接触发了校验逻辑抛出异常,导致应用启动失败,你自己写的triggerJob方法全程没有得到执行。
解决方法
1. 关闭Spring Boot Job自动执行配置
在你的application.properties配置文件中添加如下配置,禁用Spring Boot启动时自动执行Job的逻辑:
spring.batch.job.enabled=false
如果使用yml格式的配置文件,添加内容如下:
spring: batch: job: enabled: false
2. 确保自定义触发逻辑被调用
关闭自动执行后,你需要保证自己写的triggerJob方法会被执行,比如可以通过监听Spring上下文启动完成事件触发,示例代码如下:
@Component public class JobTriggerListener implements ApplicationListener<ApplicationReadyEvent> { @Autowired private TriggerJobLauncher triggerJobLauncher; @Override public void onApplicationEvent(ApplicationReadyEvent event) { try { triggerJobLauncher.triggerJob(); } catch (Exception e) { e.printStackTrace(); } } }
完成以上两步后,Job就只会在你调用launcher.run的时候执行,校验器拿到的就是你通过JobParametersBuilder构造的带参数的JobParameters对象。
内容的提问来源于stack exchange,提问作者Kranthi Gopi Raju Arepalli
相关产品推荐
相关产品推荐

