2016-12-01 3 views
1

Ich bin neue Lerner und Verwendung von Feder Annotation für die Konfiguration Kann ich sowohl @PostConstruct und @Scheduled (fixedRate = 60L * 1000L) auf die gleiche Methode wie unten angegeben? Wenn ja, was sollte die Anmerkung zur Klasse sein?mit @postconstruct und @Scheduled Annotation zusammen

@Component 
public class Cache { 

    @PostConstruct 
    @Scheduled(fixedRate = 60L * 1000L) 
    public void refreshCache() { 
    ... 
    } 

} 
+0

Wenn Sie Spring Boot verwenden, sollte die @ @ EnableScheduling-Annotation zusammen mit @ SpringBootApplication angegeben werden und sicherstellen, dass Ihre Task von Ihrer Spring-Boot-Anwendung gescannt werden kann, die eigentlich eine Bean ist '@ Component' wie Sie getan haben. –

+0

Ich benutze Spring Boot – Shailesh

+0

Wenn nicht, können Sie das Javadoc über die Klasse 'EnableScheduling' sehen.

Antwort

3

Ja, Ihre Anmerkungen in der Klasse sind korrekt. Aber Sie besser zu nutzen:

@Scheduled(fixedRate = 60L * 1000L, initialDelay=0) 
public void refreshCache() { 

ohne @PostConstruct weil:

  1. Nur eine Methode in der Klasse kann mit @PostConstruct kommentiert werden.
  2. Sie können keine überprüften Ausnahmen von der Methode mit auslösen.
  3. Andere haben diese Komponente nicht autowired.

Es gibt mehr Ursachen, aber ich höre hier auf.

+0

Ich habe versucht @Scheduled (fixedRate = 60L * 1000L, initialDelay = 0), aber es ruft nicht Methode ..! – Shailesh

+0

@Shailesh Dann ist etwas außerhalb der Klasse falsch. Bitte posten Sie Ihre 'web.xml'. –

+0

Eigentlich verwende ich kein XML für die Konfiguration, es ist rein Annotation-basierte Konfiguration – Shailesh

0

Wenn Sie kein xml verwenden, sollte dieses Beispiel das sein, was Sie wollen, was eigentlich eine Spring-Boot-Anwendung ist. https://github.com/soiff-spring/spring-boot-example


Mein vollständiges Beispiel ist hier: https://github.com/soiff-spring/spring-mvc-example

Beachten Datei und Klasse, um folgende:

  1. hello-servlet.xml
  2. HelloScheduler

dieses Projekt Packaing und setzen es in Ihrem Tomcat-Container und starten Sie Ihren Tomcat, sehen Sie das Protokoll wie folgt:

20:06:53.003 [pool-1-thread-1] INFO xyz.cloorc.example.springmvc.HelloScheduler - 1480594013001 : hello world ... 
20:06:54.001 [pool-1-thread-1] INFO xyz.cloorc.example.springmvc.HelloScheduler - 1480594014001 : hello world ... 
20:06:55.001 [pool-1-thread-1] INFO xyz.cloorc.example.springmvc.HelloScheduler - 1480594015001 : hello world ... 
20:06:56.002 [pool-1-thread-1] INFO xyz.cloorc.example.springmvc.HelloScheduler - 1480594016002 : hello world ... 
20:06:57.000 [pool-1-thread-1] INFO xyz.cloorc.example.springmvc.HelloScheduler - 1480594017000 : hello world ... 
20:06:58.002 [pool-1-thread-1] INFO xyz.cloorc.example.springmvc.HelloScheduler - 1480594018002 : hello world ... 

Viel Spaß.

+0

Wie ich herausgefunden habe, wird nur '@ Scheduled 'wirksam, wenn die Annotation' @ PostConstruct' zusammen angegeben wird. –

Verwandte Themen