У меня возникли проблемы с ManagedScheduledExecutorService. Если я отключу или отключу свое приложение, планировщик все еще работает. Он останавливается только при перезапуске сервера приложений.Запланированный запуск после отключения или отмены моего приложения
Я использую JEE, Application Server Wildfly 9 и Java8.
Следующий код ниже:
package br.com.decarli;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import javax.annotation.Resource;
import javax.enterprise.concurrent.LastExecution;
import javax.enterprise.concurrent.ManagedScheduledExecutorService;
import javax.enterprise.concurrent.Trigger;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.Destroyed;
import javax.enterprise.context.Initialized;
import javax.enterprise.event.Observes;
@ApplicationScoped
public class ApplicationSchedulerX {
@Resource(lookup = "java:jboss/ee/concurrency/scheduler/MyScheduler")
private ManagedScheduledExecutorService timerService;
public void init(@Observes @Initialized(ApplicationScoped.class) Object o) {
timerService.schedule(() -> {
System.out.println(" Run scheduler... " );
}, new Trigger() {
@Override
public Date getNextRunTime(LastExecution le, Date date) {
return getNextDateBySeconds(60);
}
@Override
public boolean skipRun(LastExecution le, Date date) {
return false;
}
});
}
private Date getNextDateBySeconds(long seconds) {
LocalDateTime ldt = LocalDateTime.now().plusSeconds(seconds);
return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
}
public void destroy(@Observes @Destroyed(ApplicationScoped.class) Object o) {
//TODO error: Lifecycle operation not supported
//timerService.shutdown();
}
}
Wildfly 9 Конфигурация планировщика:
<managed-scheduled-executor-service name="MyScheduler" jndi-name="java:jboss/ee/concurrency/scheduler/MyScheduler" hung-task-threshold="50000" long-running-tasks="true" core-threads="4" keepalive-time="500" reject-policy="ABORT"/>
вы можете использовать [контекста сервлета] (http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContextListener.html)? [example] (https://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/) – ebanouz
он работает нормально, когда вы начинаете, и когда он заканчивается, методы выполняются, но timerService все еще работает. Я не нашел способ очистить все расписания timerService. –