Ich habe Probleme mit ManagedScheduledExecutorService. Wenn ich meine Anwendung deaktiviere oder deimplementiere, wird der Scheduler noch ausgeführt. Es stoppt nur, wenn ich den Anwendungsserver neu starte.Geplant weiterhin ausgeführt nach Deaktivieren oder Deimplementierung meiner Anwendung
Ich verwende JEE, Application Server Wildfly 9 und Java8.
Der folgende Code unten:
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 Scheduler Konfiguration:
<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"/>
können Sie [ServletContextListener] (http://docs.oracle.com/javaee/7/api/javax/servlet/ServletContextListener.html)? [Beispiel] (https://www.mkyong.com/servlet/what-is-listener-servletcontextlistener-example/) – ebanouz
es funktioniert normal, wenn Sie starten und wenn es endet die Methoden ausgeführt werden, aber TimerService noch läuft. Ich habe keine Möglichkeit gefunden, alle Zeitpläne von timerService zu löschen. –