Dans la section précédente, nous avons terminé l'interface de la page d'accueil de la page d'interface utilisateur, mais il y a un problème: si j'ajoute un produit en arrière-plan, je dois redémarrer le serveur pour réintégrer les données d'arrière-plan, puis actualiser la page d'accueil pour synchroniser les données. Ce n'est évidemment pas l'effet que nous voulons. Généralement, ce type de page d'accueil du centre commercial en ligne n'est certainement pas des données synchronisées manuellement, alors comment la résoudre? Nous devons utiliser des threads et des minuteries pour synchroniser automatiquement les données de page d'accueil régulièrement.
1. Timer et Time
Nous devons utiliser les classes TIMER et THIMERTASK. Préduisons d'abord ces deux catégories.
La minuterie est une classe d'outils. Dans le package java.util, les threads l'utilisent pour organiser des tâches qui seront exécutées dans des threads d'arrière-plan plus tard. Les tâches peuvent être exécutées une fois, ou elles peuvent être exécutées régulièrement. Il a un constructeur:
Timer (Boolean Isdaemon) // Créez une nouvelle minuterie qui peut spécifier son fil associé pour s'exécuter en tant que démon.
Après le thread de démon, c'est-à-dire que le fil principal se termine, le fil se termine également, et après le thread non obligé, c'est-à-dire que le fil principal se termine, le fil continue de s'exécuter. Lorsque Isdaemon est vrai, c'est le fil de démon. La classe Timer a une méthode de calendrier qui peut créer une tâche, comme suit:
Horaire void (tâche TIMERTASK, date première, longue période) // Planifiez la tâche spécifiée pour effectuer l'exécution de retard fixe répété à l'heure spécifiée. // Le premier paramètre est la tâche spécifiée, c'est-à-dire l'objet TIMERTASK; Le deuxième paramètre est le premier temps d'ouverture de la tâche; Le troisième paramètre est l'intervalle de temps, c'est-à-dire combien de temps faut-il pour exécuter à chaque fois
Jetons un coup d'œil à Timertask. Timertask est utilisé pour créer une nouvelle tâche de thread. Il implémente l'interface Runnable. Si nous voulons créer une nouvelle tâche de thread, nous avons seulement besoin de hériter de TimeraTask et de réécrire la méthode d'exécution.
2. Créez une nouvelle tâche de thread
Créons une nouvelle tâche de thread pour mettre à jour les données d'arrière-plan:
@Component // Laissez l'objet à Spring Management Public Class ProductTimerTask étend Timertask {@Resource Private ProductService ProduceService = NULL; // injecter productService @Resource Private CatégoryService categoryService = null; // Injecte catégorieService private servletContext application = null; // Définissez un objet ServletContext, car après avoir mis à jour les données d'arrière-plan, nous devons les stocker dans le domaine d'application public void setApplication (servletContext application) {this.application = application; // Définissez cet objet d'application via l'auditeur, car l'objet d'application ne peut pas être pris ici} @Override // La même logique que l'initialisation des données de l'écoute lorsque le projet démarre public void run () {System.out.println ("--------"); List <list <produit>> bigList = new ArrayList <list <produit >> (); // Stockage Une liste avec la classe de catégorie dans BigList // 1. Remettez en question la catégorie HOT pour (catégorie Catégorie: catégorieservice.QueryByHot (true)) {// obtenir des informations de produit recommandées basées sur la liste d'identification de catégorie Hot <Product> LST = ProduceService.QuerbyCategoryId (catégorie.GetId ()); biglist.add (LST); // Mettez la liste avec la catégorie dans BigList} // 2. Laissez la requête Biglist à l'application FORME intégrée Application.SetAttribute ("BigList", BigList); // Supposons que nous ayons l'objet d'application}}Ensuite, nous modifions le contenu de l'auditeur au démarrage du projet. L'opération de requête d'origine ci-dessus a été placée dans l'auditeur. Lorsque le projet est démarré, l'auditeur commence à s'exécuter, obtient des données d'arrière-plan et les stocke dans le domaine d'application. Ensuite, le premier plan obtient les données du domaine d'application via la balise JSTL. Maintenant, nous remettons ces choses à ProductImmertask que nous avons définies, alors définissez simplement une minuterie dans l'auditeur et laissez le produitTimertask mettre à jour les données d'arrière-plan régulièrement. Consultez le code modifié dans l'auditeur:
3. Commencez la minuterie dans l'auditeur
// @ composant // L'auditeur est un composant de la couche Web. Il est instancié par Tomcat, pas le printemps. Impossible de placer dans la classe publique de printemps initDatalistener implémente servletContextListener {private productTimertask productTimertask = null; // Définir un objet ProductImmertask Private ApplicationContext context = null; @Override public void contextDestRoyed (ServletContexTevent Event) {// TODO Méthode générée automatiquement Stub} @Override public void contextinitialialialialized (ServletContexTevent Event) {contextServletContext ()); ProductTimertAsk = (ProductTimertask) context.getBean ("ProductTimertAsk"); // Obtenez un objet ProductTimertask à partir du fichier de configuration // Talk l'objet intégré à ProductTimertAsk, car le produit Immemert ne peut pas obtenir l'application, vous ne pouvez lui donner que via l'écouteur Set ProductTimertask.SetApplication (event.getServerContext ()); // Définissez la minuterie pour synchroniser les données sur la page d'accueil une fois toutes les heures (configurées comme un thread de démon) Nouveau temporisateur (true) .schedule (ProductTimertask, 0, 1000 * 60 * 60); // Exécuter la tâche ProductImertask une fois par heure, c'est-à-dire la mise à jour des données d'arrière-plan}}} En ce qui concerne le code d'opération d'origine dans l'auditeur initDatalistener, vous pouvez comparer le contenu dans la section précédente. En fait, il s'agit des données d'arrière-plan de mise à jour dans ProductTimertask, mais elle est simplement mise dans Tirmertask pour l'instant. De cette façon, nous terminons l'utilisation des fils et des minuteries pour synchroniser régulièrement les données de la page d'accueil, et cet intervalle de temps peut être défini par nous-mêmes.
En fait, certaines données de page d'accueil dans les blogs CSDN ne sont pas mises à jour en temps réel. Il y aura un temps pour mettre à jour tous les soirs, comme le classement du blog dans la colonne de gauche, le nombre de vues affichées après le classement de lecture, etc. Celles-ci sont mises à jour tous les soirs, et elles devraient être définies en arrière-plan pour mettre à jour une fois par jour. Le principe devrait être le même qu'ici. Cela réduit également la pression sur le serveur.
Lien vers cet article: http://blog.csdn.net/eson_15/article/details/51387378
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.