2017-04-15 3 views
2

Ich entwickle Java REST Web Service mit Spring und Hibernate. Ich muss ein Feature implementieren, um eine zukünftige Aufgabe zu planen. Zum Beispiel, wenn Benutzer sich in meiner Bewerbung anmelden, muss ich ihm für die ersten sechs Monate 100 virtuelle Gutschriften auf sein Konto gutschreiben. So gibt es einige ähnliche Merkmale.Wie Implementierte geplanten Task in Spring Web Service?

Ich denke wie TimerTask kann für diese Funktion verwendet werden. Das Problem ist, wenn ich Timer für jeden Benutzer erstellen, der sich anmeldet, kann ich Timer eines bestimmten Benutzers nicht stoppen, wenn er inaktiv wird und es scheint, als ob er Thread im Speicher ablegt. Wenn sich 1000 Benutzer anmelden, wird es 1000 TimerTask Threads geben.

Wie implementiert man diese Art von Feature mit Spring oder Java? Ich sollte die volle Kontrolle über den Thread haben, ich kann Thread stoppen wenn ich will.

+0

platzieren und Sie sind sicher, dass dies lange Ihr Programm ohne die Notwendigkeit ausgeführt wird? Ich denke, Sie brauchen eher eine Lösung, um diese Daten irgendwo zu speichern und regelmäßig die Zeitbedingungen zu überprüfen –

+0

Ja. Ich benutze Tomcat Server. Es wird irgendwann abstürzen und gehen, dann muss ich Server neu starten, um es zurück zu bekommen. – Mdumanoj

+0

siehe https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html – rvit34

Antwort

0

Sie können einen einzelnen Thread verwenden, um eine Aufgabe mit @scheduled Annotation und minimale XML-Konfiguration durchzuführen, werde ich den Link für Ihre reference verlassen. neu zu starten oder einen Fehler zu zwingen Neustart

Sie nur eine Methode in Ihrem Dienst erstellen erforderlich und @Scheduled Anmerkung wie

@Scheduled(cron = "0 15 10 15 * ?") 
public void scheduleTaskUsingCronExpression(){ 
long now = System.currentTimeMillis()/1000; 
System.out.println("schedule tasks using cron jobs - " + now); 
} 
+0

Ja, damit kann ich einen Job planen. Aber wie kann ich den Job stoppen? Wenn ich geplant habe, Job für jede 10 Minuten auszuführen und aus irgendwelchen Gründen möchte ich diese Ausführung stoppen, wie kann ich das tun? – Mdumanoj

+0

Versuchen Sie nicht, den Job zu stoppen! Stattdessen muss eine boolesche Überprüfung innerhalb der geplanten Aufgabe durchgeführt werden. Und du kannst die boolesche Variable ändern, um den Dienst zu stoppen und zu starten ... Bitte stimme und akzeptiere meine Antwort, wenn es funktioniert! –

+0

Ich denke nicht, dass dies der richtige Weg ist. Weil 'TimerTask' läuft und es für immer läuft. – Mdumanoj

Verwandte Themen