Java EE Batch processing中的JobRepository如何清除

How clear JobRepository in Java EE Batch processing

我的 Web 应用程序中有一个批处理作业需要输入 3 个参数。这项工作执行得非常频繁,每天几千次。在大多数情况下,输入参数是唯一的。 JobRepository 将此参数存储在堆中。在 10-12 千次执行之后,我有:

java.lang.OutOfMemoryError: GC overhead limit exceeded

我可以通过重启 wildfly 服务器来清除 JobRepository 中的数据。 如何从我的应用程序中手动清除有关已执行作业的信息?

P.S。 我不想增加堆大小。

我找到了答案

BatchEnvironment batchEnvironment = null;
ServiceLoader<BatchEnvironment> serviceLoader = ServiceLoader.load(BatchEnvironment.class);
for (Iterator<BatchEnvironment> it = serviceLoader.iterator(); it.hasNext(); ) {
    batchEnvironment = it.next();
    break;
}
JobRepository jobRepository = JobRepositoryFactory.getJobRepository(batchEnvironment);
jobRepository.removeJob("ourJobName");

现在有关此作业的所有执行的信息都将丢失。垃圾收集器可以从堆中清理有关作业的数据。