Rufen Sie die Funktion in regelmäßigen Abständen in Java
Frage
müssen wir eine Funktion in regelmäßigen Abständen in Java-Web-Anwendung ausgeführt werden. Wie Funktion einer Klasse in regelmäßigen Abständen nennen? Gibt es eine Möglichkeit, dass die Anruffunktion, wenn ein Ereignis wie hohe Belastung in Server aufgetreten und so weiter. was ist crontab? Ist das Arbeiten in regelmäßigen Abständen?
Lösung
rufen, um etwas in regelmäßigen Abständen finden Sie unter Timertask
Andere Tipps
Wenn Sie etwas robustere benötigen, können Sie verwenden Quartz
Wie bei crontab
ist das Planungstool auf Unix-Rechnern.
Für Methoden aufrufen, wenn der Server hohe Last hat, müssen Sie mindestens zwei mögliche Ansätze. Ihre App Server möglicherweise Management Haken haben, die Ihnen erlauben würde, sein Verhalten und nehmen progrommatic Aktion zu überwachen. Alterntaively haben Sie einige Systemüberwachungsfähigkeit (z. B. Tivoli oder Openview) und erzeugt „Ereignisse“, sollte es nicht allzu schwierig sein, solche Ereignisse zu liefern, wie (zum Beispiel) JMS-Nachrichten und Ihre Server sie abholen.
Allerdings möchten Sie vielleicht ein wenig mehr darüber erklären, was Sie erreichen wollen. Adaptive Anwendung beahviour könnte ziemlich schwierig sein, richtig zu machen.
Wenn Sie etwas regelmäßig ausführen möchten, tun Sie es nicht in den Webserver. Das wäre IMO ein sehr falscher Ansatz. Es ist besser zu Einsatz cron
stattdessen, wenn Sie auf einem Unix-ähnliches Betriebssystem sind. Windows-Server bieten eine ähnliche Funktionalität.
müssen wir eine Funktion in regelmäßigen Abständen laufen in Java Web-Anwendung
(1) So Blick in Ihrem Deployment Descriptor (web.xml) definiert einen Zuhörer beim Start bis zur Inbetriebnahme.
Wie Funktion einer Klasse nennen in regelmäßigen Abständen?
(2) Erstellen Sie eine Timer < in dem Hörer / a>.
Gibt es eine Möglichkeit, dass die Anruffunktion wenn ein Ereignis aufgetreten wie hohe Belastung in Server und so weiter
(3) und einige Threads laufen für Systembedingungen zu überprüfen, die mit Java zugänglich sind, auch lief System progs (Uptime, etc.) und die Ausgabe zu analysieren.
crontab ein Weg sein könnte, aber die Ausführung von Java wird ein weitere JVM starten und das ist wirklich das heiße Ding in Servlet-Containern. Alle Läufe in der gleichen JVM
Vergessen Sie nicht, über java.util.concurrent - es viele Klassen für die Planung hat, z.B. ScheduledThreadPoolExecutor, wenn Sie mehr als eine einfache Timer.
http: / /java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/package-summary.html
Es gibt auch eine Rückportierung davon Java 1.4: http://backport-jsr166.sourceforge.net .
Wenn Sie bereits Frühling verwenden, könnten Sie einen Blick auf Spring Aufgabenausführung Rahmen haben wollen - mit @Scheduled und @Async für Methoden wie Aufgaben mit Anmerkungen versehen und Umsetzung der Funktionalität in einem Prozessor, dass die Delegierten die eigentliche Arbeit an einen Arbeiter, als beschrieben in:
http: // blog .springsource.com / 2010/01/05 / Task-Scheduling-Vereinfachungen-in-Feder-3-0 /
Der Vorteil ist, dass Sie Timer mit einer cron-ähnlichen Syntax im Frühjahr Kontext definieren können und Sie nicht etwas Besonderes benötigen weitere Aufgaben einzurichten, ist es auch gut integriert in Java EE-Anwendungen und soll gut mit Web-Servern spielen (die benutzerdefinierten Themen sind in der Regel nicht immer zu tun).
Wie Funktion einer Klasse rufen regelmäßig?
Es gibt mehrere Lösungen: a Timer , eine Java-Implementierung cron wie cron4j , Quartz oder sogar die EJB Timer-API . Die Wahl der einen oder der anderen hängt stark vom Kontext ab: der Art der Anwendung, die verwendeten Technologien, die Zahl der Arbeitsplätze, etc.
.Gibt es eine Möglichkeit, dass die Anruffunktion, wenn ein Ereignis wie hohe Belastung in Server aufgetreten ist, und so weiter
Sie könnten vielleicht JMX verwenden in Ihren Jobs für den Zugriff und Monitor Informationen und lösen eine Aktion unter einem bestimmten Zustand. Aber das ist mehr ein Pull-Modus, nicht Ereignis basiert.