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 <!-- 定时器依赖 结束 -->
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>
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 :
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>
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
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!