2016-05-14 11 views
0

Ich habe einen EJB Scheduler. Ich möchte, dass die Methode jede Stunde läuft. Aber die Methode läuft nur einmal. Ich weiß nicht warum.EJB Scheduler wird nicht jede Stunde ausgeführt?

Dies ist meine EJB Klasse:

@Singleton 
public class DBTimeout { 

    @PersistenceContext 
    private EntityManager em; 

    @Inject 
    private Logger logger; 

    @Schedule(second = "0", minute = "0", hour = "*/1", info = "Every 1 hour", persistent = false) 
    public void refreshDBConnectionPool() { 
    em.createNativeQuery("SELECT 1"); 
    logger.info("successfully executed cronejob for refreshing Database Connection Pool."); 
    } 

} 
+0

Haben Sie versucht, die Stunde auf "*" zu setzen? Für mich scheint es das Gleiche zu sein, aber ich bin mir nicht sicher, was ich sonst noch versuchen würde. – stdunbar

+0

Wenn ich * verwende, würde die Methode jedes Mal ausgeführt werden oder nicht? –

+0

Es sollte alle Stunden bedeuten. Du hast Minute und Sekunde, also jede Stunde zur vollen Stunde. – stdunbar

Antwort

0

Mit Wildfly, stellen Sie sicher, dass Sie Standalone-full.xml als Ihre Konfiguration verwenden. Die Standalone.xml-Standardversion unterstützt keine EJB-Zeitpläne.

+0

Ja, ich verwende Standalone-full.xml –

+0

Ich habe einen anderen ejb Scheduler in einer anderen Klasse, die ich zu einer festen Zeit aufrufen. Es funktioniert ohne Probleme. Aber die Syntax alle 4 Stunden Ich weiß nicht, warum es nicht funktioniert –

0

hey können Sie Code von unten versuchen?

import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.ejb.ScheduleExpression; 
import javax.ejb.Singleton; 
import javax.ejb.Startup; 
import javax.ejb.Timeout; 
import javax.ejb.TimerService; 

@Singleton 
@Startup 
public class DBTimeout { 

    @PersistenceContext 
    private EntityManager em; 

    @Inject 
    private Logger logger; 

    @Resource 
    private TimerService timerService; 

    @Timeout 
    public void timeOut() { 
     refreshDBConnectionPool(); 
    } 

    @PostConstruct 
    public void initTimer() { 
     System.out.println("INIT-CALLED"); 
     ScheduleExpression exp = new ScheduleExpression(); 
     exp.hour("*/1").minute("*"); 
     timerService.createCalendarTimer(exp); 
    } 

    public void refreshDBConnectionPool() { 
     em.createNativeQuery("SELECT 1"); 
     logger.info("successfully executed cronejob for refreshing Database Connection Pool."); 
    } 
} 
Verwandte Themen