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");
现在有关此作业的所有执行的信息都将丢失。垃圾收集器可以从堆中清理有关作业的数据。
我的 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");
现在有关此作业的所有执行的信息都将丢失。垃圾收集器可以从堆中清理有关作业的数据。