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

是否可以查询正在运行的Spring批处理应用程序以检查作业状态?

傅和璧
2023-03-14

我正在开发一个Spring Batch应用程序。我将这个应用程序作为ajar文件部署在一个生产Linux服务器上,并作为一个普通的jar应用程序运行。我的Spring Batch应用程序已经启动并运行,实际上我的updateInfoBatch-0.0.1-snapshot.jar似乎是作为进程启动并运行的:

webadmin@webadmin.myserver.it [~]# ps aux | grep java
webadmin  4677  0.1  3.2 10255180 809528 ?     Sl   Nov17  12:10 java -jar UpdateInfoBatch-0.0.1-SNAPSHOT.jar
webadmin  5152  0.0  0.0 112812   980 pts/1    S+   09:58   0:00 grep --color=auto java

我的应用程序包含两个使用CRON表达式在特定时间调度的作业定义:

/**
 * This bean schedules and runs our Spring Batch job.
 */
@Component
@Profile("!test")
public class SpringBatchExampleJobLauncher {

    private static final Logger LOGGER = LoggerFactory.getLogger(SpringBatchExampleJobLauncher.class);

    @Autowired
    @Qualifier("launcher")
    private JobLauncher jobLauncher;
    
    @Autowired
    @Qualifier("updateNotaryDistrictsJob")
    private Job updateNotaryDistrictsJob;

    @Autowired
    @Qualifier("updateNotaryListInfoJob")
    private Job updateNotaryListInfoJob;
   
    @Scheduled(cron = "${cron.expresion.runUpdateNotaryListInfoJob}")
    public void runUpdateNotaryListInfoJob() {
        LOGGER.info("SCHEDULED run of updateNotaryListInfoJob STARTED");
        Map<String, JobParameter> confMap = new HashMap<>();
        confMap.put("time", new JobParameter(System.currentTimeMillis()));
        JobParameters jobParameters = new JobParameters(confMap);
        try {
            jobLauncher.run(updateNotaryListInfoJob, jobParameters);
        }catch (Exception ex){
            LOGGER.error(ex.getMessage());
        }
    }
    
    
    @Scheduled(cron = "${cron.expresion.runUpdateNotaryDistrictJob}")
    public void runUpdateNotaryDistrictsJob() {
        LOGGER.info("SCHEDULED run of updateNotaryDistrictsJob STARTED");
        Map<String, JobParameter> confMap = new HashMap<>();
        confMap.put("time", new JobParameter(System.currentTimeMillis()));
        JobParameters jobParameters = new JobParameters(confMap);
        try {
            jobLauncher.run(updateNotaryDistrictsJob, jobParameters);
        }catch (Exception ex){
            LOGGER.error(ex.getMessage());
        }

    }
    

    private JobParameters newExecution() {
        Map<String, JobParameter> parameters = new HashMap<>();

        JobParameter parameter = new JobParameter(new Date());
        parameters.put("currentTime", parameter);

        return new JobParameters(parameters);
    }
    
}

现在,我询问是否有某种方法可以与这个正在运行的应用程序进行交互,以便检查在这个应用程序中定义的作业的最后一次执行过程中是否发生了一些错误。是否可以查询我正在运行的应用程序,询问作业状态或类似的情况?

共有1个答案

锺离伟彦
2023-03-14

是的,您可以使用Spring Batch数据库表进行此检查:https://docs.Spring.io/spring-batch/docs/current/reference/html/schema-appendix.html

 类似资料:
  • 我试图检查是否有任何正在运行的作业实例。 但是,当我们有未正确完成的旧执行时,上述代码将不起作用。在这种情况下,作业执行的大小大于 1。

  • 我想检查Quartz作业是否正在运行。我发现它可以使用调度程序。getCurrentlyExecutingJobs()。但是我对此感到困惑,我应该把它放在哪里才能得到结果呢?谢谢

  • 我正在使用一个相当大的数据集(大约500Mio-Triples)存储在图形数据库免费并在我的本地开发人员机器上运行。 我想用RDF4J对数据集执行一些操作,并且必须或多或少地选择整个数据集。要进行测试,我只需选择所需的元组。代码在第一个一百万元组中运行良好,之后由于graphDB继续分配更多的RAM,速度变得非常慢。 是否有可能对非常大的数据集执行选择查询并批量获取它们? 基本上,我只想通过一些选

  • 它提供了很多与Spring Boot相关的信息,但我无法理解它是否也能提供我的Spring Batch作业的执行状态信息。例如,如果一个特定的作业成功完成或失败。 是否可以用Spring Boot Admin工具监视这些信息?如果可能的话,我如何检查我的工作状态?

  • 问题内容: 如何检查Glassfish DAS是否以编程方式运行,即使已将其部署在本地计算机还是远程计算机上? 使用Java6 问题答案: 我找到了一种方法来检查DAS是否已启动,而不是Linux脚本。通过这种方式,我的应用程序和DAS都在同一台计算机上还是每台安装在不同的计算机上都没有关系。 }