2016-04-28 8 views
3

In meinem app Ich habe 3 geplant Methoden in drei separaten Klassen:Wie funktioniert die @Scheduled Annotation von Spring?

@Component 
public class ClassA { 
@Scheduled(fixedDelay = 5000L) 
    public void methodA(){ 
     //do task "A" 
    } 
} 

@Component 
public class ClassB { 
@Scheduled(fixedDelay = 5000L) 
    public void methodB(){ 
     //do task "B" 
    } 
} 

@Component 
public class ClassF { 
@Scheduled(fixedDelay = 5000L) 
    public void methodF(){ 
     //do task "F" 
    } 
} 

In Apps Application gibt es solche Linien:

<task:annotation-driven executor="myExecutor" scheduler="scheduler"/> 
<task:executor id="myExecutor"/> 
<task:scheduler id="scheduler"/> 

ich es nicht verstehen kann, aus den Protokolldateien aus, so Hier sind meine Fragen:

  • Wie werden diese Methoden ausgeführt? Parallel oder nacheinander? Wie kann es dann nacheinander konfiguriert werden, um parallel zu arbeiten?
  • Ist diese Konfuguration Multithreading (für jede Methode) oder nicht (und wenn nicht - wieder, wie kann es geändert werden)?

Antwort

3

Es verwendet die Java Executor API im Hintergrund. Alles, was Sie wissen müssen, finden Sie in

Sie wählen grundsätzlich eine TaskExecutor-Implementierung und legen Sie dann fest, wie viele Verarbeitungsthreads Sie möchten.

In Ihrem Beispiel werden die 3 Methoden kontinuierlich mit einer festen Verzögerung von 5 Sekunden ausgeführt. Wenn Sie jedoch nur 1 Verarbeitungsthread definieren und eine Methode lange dauert, wird die Ausführung der anderen beiden Methoden verschoben. Wenn Sie nicht von den anderen Funktionen abhängig sein möchten, die mit @Scheduled ausgeführt werden, benötigen Sie in diesem Beispiel 3 Verarbeitungs-Threads.