当前位置: 首页 > 知识库问答 >
问题:

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

夏宪
2023-03-14

目前,由于一个我无法解决的问题,我一直在将Spring Batch Admin(SBA)集成到我们的项目中。希望有人能给我一个建议。

我们使用了示例SBA应用程序(Github的当前版本),只添加了一个Tasklet。我通过/job配置上传Spring批处理描述(XMLs)。SBA的json API使用。这工作正常。在SBA的HTML页面中,我看到该作业已注册并可启动。它可以通过API(/jobs/{jobName}.json)和web界面执行。

问题是,如果我上传一个新作业,它也可以注册和启动。但之前注册的作业会自动变为“launchable=false”。不能再执行了。

我找不到关于这种行为的任何文档,也找不到任何可以避免的解决方案。你能告诉我怎么回事吗?

提前谢谢。

更新

我无法让它工作。我的解决方法是

1) 使用/job配置API方法(POST、mutipart)将作业数据上传为XML文件。这就解决了在多次上传后作业仍然可以启动的问题。

2)我手动将XML文件上传到WEB-INF\类\META-INF\Spring\批处理\作业,因此,这些作业在重新扫描后也是可执行的。

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

共有1个答案

姜卜霸
2023-03-14

你可以注册工作工厂到Job注册表

@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());
}
 类似资料:
  • 我有一个用Spring Boot(1.4.1.Release)开发的Spring批处理作业。 它成功地从命令行运行,并将作业执行数据写入MySQL。它在Spring Batch Admin(2.0.0.M1,指向MySQL)中显示为不可启动的作业,我可以看到作业执行度量。 我想知道以前有没有人这样做过。文档中有一节添加您自己的启动作业。但是它没有指定在哪里为作业添加实现jar? 是spring-b

  • 我有两个不同的工作(实际上更多,但为了简单起见,假设2)。每个作业可以与另一个作业并行运行,但同一作业的每个实例应该顺序运行(否则实例将共享彼此的资源)。 基本上,我希望这些作业中的每一个都有自己的作业实例队列。我想我可以使用两个不同的线程池作业启动程序(每个都有一个线程),并将一个作业启动程序与每个作业相关联。 在从Spring Batch Admin web UI中启动作业时,是否有一种方法可

  • 我正在处理一个Spring批处理应用程序,该应用程序包含两个不同的作业bean(表示两个不同的作业)。这两项工作都必须由我的应用程序执行(目前,它可以顺序和并行地完成。目前它不是那么重要)。 我会试着解释我的情况和遇到的问题是什么: 首先,我有一个配置类,其中声明了我的两个作业对象(以及相关步骤): 然后,在第一时间,我创建了另一个SpringBatchExampleJobLauncher启动器类

  • 我通过直接将作业文件夹删除到文件系统中来执行手动清理,现在我发现一个运行中的作业被阻塞,无法中止。 我尝试了这里的答案来迫使它停止,但它不起作用,因为它无法在系统中找到现有的工作。 此外,当我点击正在运行的作业时,会出现404错误: 我是否可以在不重新启动服务器的情况下中止正在运行的作业?

  • 我得和Spring批处理问题。都与通过命令行传入的JobParameters有关。 第一期: 为了从JobParameters获取路径,我使用BeforeStep注释加载JobParameters并将它们复制到局部变量上。不幸的是,这不起作用。变量将为并且执行失败,因为文件无法打开。 如何访问读取器中的作业参数?我想将文件路径作为命令行参数传入,然后读取这个文件。