新作业注册后,Spring Batch Admin现有作业不再可以启动

目前,我坚持将Spring Batch Admin(SBA)集成到我们的项目中,导致我无法解决的问题 . 希望有人对我有建议 .

我们使用示例SBA应用程序(来自Github的当前版本)并添加了一个Tasklet . 我使用SBA的/job-configuration.json API上传Spring Batch描述(XML) . 这可以正常工作 . 在SBA的HTML页面中,我看到作业已注册且可以启动 . 它可以通过API(/jobs/.json)和Web界面执行 .

问题是,如果我上传新作业,它也会被注册并可以启动 . 但之前注册的作业会自动变为“可启动=假” . 它不能再被执行了 .

我找不到任何关于此行为的文档,也没有任何可避免的解决方案 . 你能告诉我一个可能出错的方向吗?

提前致谢 .

UPDATE

我无法让它发挥作用 . 我的解决方法现在

1)使用/ job-configuration API方法(POST,mutipart)将作业数据上载为XML文件 . 这解决了多次上传后作业仍然可以启动的问题 .

2)我手动将XML文件上传到WEB-INF \ classes \ META-INF \ spring \ batch \ jobs,因此,在重新开始之后,作业也是可执行的 .

这不好,但有效 . 我仍然欣赏任何其他更优雅的解决方案 .

回答(1)

2 years ago

您可以将Job factory注册到JobRegistry

@Autowired
private JobRegistry jobRegistry;

protected JobFactory factory;

@PostConstruct
public void init() throws DuplicateJobException {
    factory = new JobFactory() {

        @Override
        public Job createJob() {
            return job();   //your job creation logic
        }

        @Override
        public String getJobName() {
            return jobName();   
        }

    };
    jobRegistry.register(factory);
}

//for your own launcher
protected void run() throws Exception {
    jobLauncher.run(factory.createJob(), parameters().toJobParameters());
}