Im vorherigen Abschnitt haben wir die Benutzeroberfläche der Homepage -Benutzeroberfläche abgeschlossen, aber es gibt ein Problem: Wenn ich ein Produkt im Hintergrund hinzufüge, muss ich den Server neu starten, um die Hintergrunddaten neu zu synchronisieren, und dann die Startseite aktualisieren, um die Daten zu synchronisieren. Dies ist offensichtlich nicht der Effekt, den wir wollen. Im Allgemeinen ist diese Art von Online -Mall -Homepage definitiv nicht manuell synchronisierte Daten. Wie kann man sie also lösen? Wir müssen Threads und Timer verwenden, um die Homepage -Daten automatisch regelmäßig zu synchronisieren.
1. Timer und Timertask
Wir müssen die Timer- und TimerTask -Klassen verwenden. Lassen Sie uns zuerst diese beiden Kategorien vorstellen.
Timer ist eine Werkzeugklasse. Im Java.util -Paket ordnen Threads Aufgaben an, die später in Hintergrund -Threads ausgeführt werden. Aufgaben können einmal ausgeführt oder regelmäßig ausgeführt werden. Es hat einen Konstruktor:
Timer (boolean isdaemon) // Erstellen Sie einen neuen Timer, mit dem der zugeordnete Thread als Daemon ausgeführt werden kann.
Nach dem Daemon-Thread endet der Hauptfaden, der Thread endet auch und nach dem nicht-daemon-Thread wird der Hauptfaden endet, der Thread wird weiterhin ausgeführt. Wenn Isdaemon wahr ist, ist es der Daemon -Thread. Die Timer -Klasse verfügt über eine Zeitplanmethode, die eine Aufgabe erstellen kann, wie folgt:
Void -Zeitplan (TimerTask -Aufgabe, Datum des ersten Mals, langer Zeitraum) // Planen Sie die angegebene Aufgabe, um eine wiederholte Ausführung der festen Verzögerung zum angegebenen Zeitpunkt durchzuführen. // Der erste Parameter ist die angegebene Aufgabe, dh das Timertask -Objekt; Der zweite Parameter ist die erste Öffnungszeit. Der dritte Parameter ist das Zeitintervall, dh wie lange dauert es, jedes Mal auszuführen
Schauen wir uns Timertask an. TICEERTASK wird verwendet, um eine neue Thread -Aufgabe zu erstellen. Es implementiert die runnable Schnittstelle. Wenn wir eine neue Thread -Aufgabe erstellen möchten, müssen wir nur Timertask erben und die Run -Methode neu schreiben.
2. Erstellen Sie eine neue Thread -Aufgabe
Erstellen wir eine neue Thread -Aufgabe, um die Hintergrunddaten zu aktualisieren:
@Component // Überlassen Sie das Objekt dem Spring Management Public Class ProductTimerTask erweitert TimeTask {@resource private productservice productService = null; // ProductService @Resource Private categoryService categoryService = null; // categoryService private servletContext application = null inject; // Definieren Sie ein ServletContext -Objekt, da wir nach der Aktualisierung der Hintergrunddaten es in der Anwendungsdomäne öffentliche void setApplication (ServletContext -Anwendung) speichern müssen {this.application = application; // Setzen Sie dieses Anwendungsobjekt über den Hörer, da das Anwendungsobjekt hier nicht genommen werden kann} @Override // dieselbe Logik wie die Dateninitialisierung des Hörers, wenn das Projekt öffentlich void run () {System.out.println ("--------") startet; Liste <Liste <produkt >> biglist = new ArrayList <list <product >> (); // Speichern Sie eine Liste mit der Kategorieklasse in BigList // 1. Fragen Sie die heiße Kategorie für (Kategorie Kategorie: Kategorieservice.queryByHot (true)) {// empfohlene Produktinformationen basierend auf der Hot Kategorie -ID -Liste <produkts> lst = products.querByCategoryID (category.getId ()) heraus. BigList.Add (LST); // Die Liste mit Kategorie in BigList} // 2. Überlassen Sie die Abfrage BigList der Anwendung integrierte Objekt-Anwendung. // Angenommen, wir haben das Anwendungsobjekt}}Als nächstes ändern wir den Inhalt des Hörers, wenn das Projekt gestartet wird. Die obige ursprüngliche Abfrageoperation wurde im Hörer platziert. Wenn das Projekt gestartet wird, beginnt der Hörer mit der Ausführung, erhält Hintergrunddaten und speichert sie in der Anwendungsdomäne. Anschließend erhält der Vordergrund die Daten von der Anwendungsdomäne über das JSTL -Tag. Jetzt übergeben wir diese Dinge an die von uns definierte Produkttimertask. Legen Sie also einfach einen Timer im Hörer ein und lassen Sie die Produkttimertask die Hintergrunddaten regelmäßig aktualisieren. Schauen Sie sich den geänderten Code im Listener an:
3. Starten Sie den Timer im Hörer
//@component // Listener ist eine Komponente der Webschicht. Es wird durch Tomcat instanziiert, nicht von Frühling. Kann nicht in die Frühling Public Class initdatalistener implementiert servletContextListener {private productTimerTask productTimerTask = null; // ein productTimerTask -Objekt private applicationContext context = null definieren; @Override public void contextDestroyed (servletContexevent Ereignis) {// Todo Auto-Generated-Methode Stub} @Override public void contextInitialized (ServletConteEvent Ereignis) {context = webapplicationContextils.getwebaplicationContext (Event.GetServletContext (); productTimerTask = (productTimerTask) context.getBean ("productTimerTask"); // Produkttimertask-Objekt aus der Konfigurationsdatei abrufen // Das integrierte Objekt in productTimerTask, da die productTimerTask nicht die Anwendung erhalten kann, können Sie sie nur über den Hörer-Set-Produkttimertask. // Setzen Sie den Timer so, dass die Daten auf der Homepage einmal pro Stunde (als Daemon -Thread konfiguriert) neuer Timer (TRUE). In Bezug auf den ursprünglichen Betriebscode im Initdatalistener -Listener können Sie den Inhalt im vorherigen Abschnitt vergleichen. Tatsächlich sind es die Update -Hintergrunddaten in ProductTimerTask, aber es wird vorerst nur in Timertask eingebaut. Auf diese Weise vervollständigen wir die Verwendung von Threads und Timern, um die Homepage -Daten regelmäßig zu synchronisieren, und dieses Zeitintervall kann von uns selbst festgelegt werden.
Tatsächlich werden einige Homepage -Daten in CSDN -Blogs in Echtzeit nicht aktualisiert. Es wird eine Zeit zum Update für jeden Abend geben, z. B. das Blog -Ranking in der linken Spalte, die Anzahl der Ansichten, die nach dem Lesen von Ranglisten angezeigt werden usw. Diese werden jeden Abend aktualisiert. Das Prinzip sollte das gleiche sein wie hier. Dies reduziert auch den Druck auf den Server.
Link zu diesem Artikel: http://blog.csdn.net/eson_15/article/details/51387378
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.