Maison > Java > javaDidacticiel > le corps du texte

Exemple d'implémentation de Spring+quartz

PHP中文网
Libérer: 2017-06-21 09:28:16
original
1480 Les gens l'ont consulté

Il y a un problème dans le projet de mon ami. Son côté est basé sur l'architecture Spring et comporte une tâche relativement simple qui nécessite une exécution planifiée. Après avoir compris ses besoins, il a proposé une implémentation Spring+quartz relativement simple.

Notez que cet article explique uniquement comment effectuer les tâches planifiées les plus simples dans le cadre du projet Spring terminé.

La première étape est de connaître l'architecture Spring, qui est très intéressante et intéressante. L'effet de brancher et de débrancher librement les modules fonctionnels peut être obtenu. Le projet d'ingénierie est basé sur la gestion des dépendances des packages MAVEN, alors listez les références des packages de dépendances nécessaires cette fois-ci :

 1 <!-- 定时器依赖 开始 --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-context-support</artifactId> 5 <version>4.0.2.RELEASE</version> 6 </dependency> 7  8   9 10 <dependency>11 <groupId>org.quartz-scheduler</groupId>12 <artifactId>quartz</artifactId>13 <version>2.2.1</version>14 </dependency>15 <!-- 定时器依赖 结束 -->
Copier après la connexion

Bien sûr, cela dépend de la correspondance de la version Spring correspondante. Notre projet ici est 4.0.2. Le package précédent spring-context-support est principalement utilisé comme composant pour la communication et la gestion entre Spring et quartz. S'il est commenté, une erreur comme celle-ci sera signalée

dans la configuration de MAVEN Après avoir terminé les packages qui doivent être ajoutés (les autres packages ne seront pas abordés ici pour le moment, cet article ne traite que de la configuration dans le cadre du projet Spring complet), nous pouvons commencer à ajouter des modules fonctionnels pour les tâches planifiées à ce projet.

La deuxième étape consiste à repartir de l'origine du projet web, les modifications dans web.xml. Étant donné que le fichier de configuration Spring du projet d'origine était Spring-mvc.xml, j'ai modifié le fichier de configuration de la tâche planifiée en spring-time.xml. De cette manière, la même configuration d'analyse peut être lue au démarrage. Le code spécifique est le suivant :

1 <context-param>2         <param-name>contextConfigLocation</param-name>3         <param-value>classpath:spring-*.xml</param-value>4     </context-param>
Copier après la connexion
Ensuite je vais vous montrer la structure de mon projet :

Avec cette configuration, Le projet saura comment l'appeler. Après avoir réalisé cette étape, nous pouvons continuer à avancer ;

La troisième étape consiste à terminer la configuration de base de spring-timer.xml, une tâche planifiée. Dans cette configuration de fichier, nous effectuons principalement trois choses :

1. Configurer les paramètres de démarrage, concernant le chargement paresseux (pour le dire brièvement, par exemple, initialiser une certaine variable à null est aussi une sorte de chargement paresseux, c'est-à-dire Autrement dit, une fois le service démarré, il ne sera instancié que lorsqu'il sera réellement appelé, sinon il n'existera pas dans la mémoire. Cela ne peut qu'économiser de l'espace logique, mais cela peut également entraîner la découverte du problème après un long délai. . , ne sera pas expliqué en détail ici), et la configuration du déclencheur

2. La configuration de quartz-2.x, y compris le nom du travail à appeler après le déclenchement de la tâche planifiée ; , et l'expression corn (c'est-à-dire que l'expression planifiée contrôle la raison pour laquelle le programme est exécuté à plusieurs reprises. Cette fois, j'ajouterai le contenu sur l'expression cron plus tard

3. Configurez le contenu du travail et le) ; classe spécifique correspondant à l'emploi.

Maintenant que l'explication du processus logique est terminée, voici le code :

Après avoir terminé la configuration du fichier de configuration ici , vous pouvez commencer l'étape suivante, la logique métier spécifique est implémentée
 1 <?xml version="1.0" encoding="UTF-8"?>   2 <beans xmlns="http://www.springframework.org/schema/beans"   3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  4     xmlns:p="http://www.springframework.org/schema/p"   5     xsi:schemaLocation="http://www.springframework.org/schema/beans  
 6      ">   7    8         <!-- 启动触发器的配置开始 -->   9     <bean name="startQuertz" lazy-init="false" autowire="no"  10         class="org.springframework.scheduling.quartz.SchedulerFactoryBean">  11         <property name="triggers">  12             <list>  13                 <ref bean="myJobTrigger" />  14             </list>  15         </property>  16     </bean>  17     <!-- 启动触发器的配置结束 -->  18   19     <!-- 调度的配置开始 -->  20     <!--  21         quartz-1.8以前的配置   
22     <bean id="myJobTrigger"  
23         class="org.springframework.scheduling.quartz.CronTriggerBean">  
24         <property name="jobDetail">  
25             <ref bean="myJobDetail" />  
26         </property>  
27         <property name="cronExpression">  
28             <value>0/1 * * * * ?</value>  
29         </property>  
30     </bean>  
31     -->  32     <!-- quartz-2.x的配置 -->  33     <bean id="myJobTrigger"  34         class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">  35         <property name="jobDetail">  36             <ref bean="myJobDetail" />  37         </property>  38         <property name="cronExpression">  39         40         <value>0/10 * *  * * ?</value>41           <!--   <value>1 52 * * * ?</value>  --> 42         </property>  43     </bean>  44     <!-- 调度的配置结束 -->  45   46     <!-- job的配置开始 -->  47     <bean id="myJobDetail"  48         class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">  49         <property name="targetObject">  50             <ref bean="myJob" />  51         </property>  52         <property name="targetMethod">  53             <value>work</value>  54         </property>  55     </bean>  56     <!-- job的配置结束 -->  57   58     <!-- 工作的bean -->  59     <bean id="myJob" class="com.tec.kevin.quartz.jobTest" />  60   61 </beans>
Copier après la connexion
La quatrième étape est la mise en œuvre de la logique métier spécifique ;

Ce qu'il convient de noter ici, ce sont les deux points de l'image ci-dessous

L'image ci-dessus est spécifique Le nom de la classe d'implémentation métier doit être le même que la configuration de la tâche planifiée dans la figure ci-dessous.

Après avoir terminé ce qui précède, nous pouvons démarrer le projet pour voir l'effet réel.

Comme vous pouvez le voir ici, la tâche planifiée est exécutée toutes les 10 secondes selon notre configuration précédente 0/10 * * * * ?

                                                                                                                                                                                                                                                                            Il a été exécuté deux fois en même temps. La raison trouvée plus tard était que lors de la configuration de web.xml, la tâche planifiée était configurée à plusieurs reprises, ce qui entraînait son exécution plusieurs fois. Si vous rencontrez cette situation, vous pouvez vous référer à ma solution.

Il y aura ensuite deux articles, l'un est une méthode de mise en œuvre plus simple pour écrire des tâches planifiées et l'autre explique les expressions cron.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal