- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 wildfly 8.2 上开发 Java EE 7 应用程序,需要定期运行后台任务。我注入(inject)了一个执行程序服务并安排了一个任务,这部分工作正常:
@Resource
private ManagedScheduledExecutorService executorService;
...
executorService.scheduleWithFixedDelay(() -> {
try {
// do some stuff
} catch (Throwable t) {
log.error("Error", t);
}
}, 0, 1, TimeUnit.MINUTES);
现在(实际上很好)的功能是在重新部署时保存计划任务,因此仍会在新部署中进行计划。
但是我如何检测任务是否已经安排好以避免多次安排它?
我尝试使用 ScheduledFuture
并取消 @PreDestroy
上的任务和@PrePassivate
reloadTreeFuture = executorService.scheduleWithFixedDelay(() -> {
...
@PreDestroy
@PrePassivate
protected void shutdown() {
reloadTreeFuture.cancel(true);
}
只要相应的任务没有在触发取消的那一刻执行,这就可以正常工作。由于该任务运行时间长且运行频繁,因此在执行过程中命中它的可能性比较高。
如果在任务仍在执行时触发取消,则取消似乎什么都不做。它立即返回,方法 ScheduledFuture.isDone()
也返回 true 但从日志中我可以看到任务仍在后台执行,直到它到达需要注入(inject) Bean 的点,而注入(inject) Bean 不是由于取消部署过程可用。然后该过程以 org.jboss.msc.service.ServiceNotFoundException
结束 - 但仍在计划中。
reloadTreeFuture.cancel(true);
while (!reloadTreeFuture.isDone()) {
Thread.sleep(200); // I know this is bad - it's just for testing
}
如此基本的问题:我怎样才能确保任务不会被安排两次(或更多次)?
最佳答案
您可以记下每个任务的 ID,并在执行前检查它们。当然,这可能不是最佳解决方案,但它确实有效。
关于wildfly-8 - 避免 ManagedScheduledExecutorService 中的重复任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33253713/
我注意到在我的开发环境(Netbeans 和 Glassfish)中,ManagedScheduledExecutorService 创建的计划任务在服务器重新启动后无法继续存在。 我做错了什么还是这
我的应用程序使用容器 (TomEE) 提供的 ManagedScheduledExecutorService,通过 @Resource 注释注入(inject)。 这是我自己的实例,还是与在同一容器中
我正在 wildfly 8.2 上开发 Java EE 7 应用程序,需要定期运行后台任务。我注入(inject)了一个执行程序服务并安排了一个任务,这部分工作正常: @Resource privat
如何查找我在应用程序的 weblogic.xml 中定义的自定义 ManagedScheduledExecutorService? 我尝试使用InitialContext.lookup,但它不起作用。
我是一名优秀的程序员,十分优秀!