Heim  >  Artikel  >  Java  >  Beispiel für die Implementierung von Spring+Quarz

Beispiel für die Implementierung von Spring+Quarz

PHP中文网
PHP中文网Original
2017-06-21 09:28:161472Durchsuche

Es gibt ein Problem im Projekt meines Freundes. Seine Seite basiert auf der Spring-Architektur und hat eine relativ einfache Aufgabe, die eine geplante Ausführung erfordert. Nachdem er seine Bedürfnisse verstanden hatte, schlug er eine relativ einfache Spring+Quarz-Implementierung vor.

Beachten Sie, dass in diesem Artikel nur erläutert wird, wie die einfachsten geplanten Aufgaben im Rahmen des abgeschlossenen Spring-Projekts erledigt werden.

Der erste Schritt besteht darin, die Spring-Architektur kennenzulernen, die sehr interessant und interessant ist. Der Effekt des freien Ein- und Aussteckens von Funktionsmodulen kann erzielt werden. Das Engineering-Projekt basiert auf der MAVEN-Paketabhängigkeitsverwaltung. Listen Sie daher die benötigten Abhängigkeitspaketreferenzen auf:

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

Dies hängt natürlich von der entsprechenden Spring-Versionsübereinstimmung ab. Unser Projekt hier ist 4.0.2. Das vorherige Paket spring-context-support wird hauptsächlich als Komponente für die Kommunikation und Verwaltung zwischen Spring und Quartz verwendet. Wenn es auskommentiert ist, wird ein Fehler wie dieser gemeldet

in der MAVEN-Konfiguration Nachdem wir die Pakete fertiggestellt haben, die hinzugefügt werden müssen (andere Pakete werden hier vorerst nicht besprochen, dieser Artikel behandelt nur die Konfiguration im Rahmen des vollständigen Spring-Projekts), können wir damit beginnen, Funktionsmodule für geplante Aufgaben hinzuzufügen dieses Projekt.

Der zweite Schritt besteht darin, beim Ursprung des Webprojekts zu beginnen, den Änderungen in web.xml. Da die Spring-Konfigurationsdatei des ursprünglichen Projekts Spring-mvc.xml war, habe ich die Konfigurationsdatei der geplanten Aufgabe in spring-time.xml geändert. Auf diese Weise kann beim Start die gleiche Scan-Konfiguration gelesen werden. Der spezifische Code lautet wie folgt:

1 <context-param>2         <param-name>contextConfigLocation</param-name>3         <param-value>classpath:spring-*.xml</param-value>4     </context-param>

Dann zeige ich Ihnen meine Projektstruktur:

Mit dieser Konfiguration weiß das Projekt, wie es aufzurufen ist. Nachdem wir diesen Schritt erreicht haben, können wir weitermachen.

Der dritte Schritt besteht darin, die Kernkonfiguration von spring-timer.xml abzuschließen, eine geplante Aufgabe. In dieser Dateikonfiguration erledigen wir hauptsächlich drei Dinge:

1. Konfigurieren Sie die Starteinstellungen bezüglich des verzögerten Ladens (um es kurz auszudrücken: Das Initialisieren einer bestimmten Variablen auf Null ist beispielsweise auch eine Art verzögertes Laden. Das Dies bedeutet, dass der Dienst nach dem Start nur dann instanziiert wird, wenn er tatsächlich aufgerufen wird. Dies kann nur logischen Speicherplatz sparen, kann aber auch dazu führen, dass das Problem mit einer langen Verzögerung erkannt wird . , wird hier nicht im Detail erklärt) und die Konfiguration des Triggers;

2. Die Konfiguration von quartz-2.x, einschließlich des Namens des Jobs, der nach dem Auslösen der geplanten Aufgabe aufgerufen werden soll , und der Maisausdruck (d. h. der geplante Ausdruck steuert den Grund, warum das Programm wiederholt ausgeführt wird. Dieses Mal werde ich den Inhalt zum Cron-Ausdruck später hinzufügen).

3. Konfigurieren Sie den Inhalt des Jobs und des spezifische Klasse, die dem Job entspricht.

Nachdem die Erklärung des logischen Prozesses abgeschlossen ist, finden Sie hier den 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>
Nach Abschluss der Konfiguration der Konfigurationsdatei hier , Sie können mit dem nächsten Schritt beginnen, die spezifische Geschäftslogik wird implementiert

Der vierte Schritt ist die Implementierung der spezifischen Geschäftslogik.

Was hier zu beachten ist, sind die beiden Punkte im Bild unten

Das Bild oben ist spezifisch Der Name der Geschäftsimplementierungsklasse muss mit der geplanten Aufgabenkonfiguration in der folgenden Abbildung übereinstimmen.

Nach Abschluss der oben genannten Schritte können wir mit dem Projekt beginnen, um den tatsächlichen Effekt zu sehen.

Wie Sie hier sehen können, wird die geplante Aufgabe gemäß unserer vorherigen Konfiguration alle 10 Sekunden ausgeführt. 0/10 * * * * ?                                                                                                                                                                                                                                                                    Es wurde zweimal gleichzeitig ausgeführt. Der später gefundene Grund war, dass bei der Konfiguration von web.xml die geplante Aufgabe wiederholt konfiguriert wurde, was dazu führte, dass sie mehrmals ausgeführt wurde. Wenn Sie auf diese Situation stoßen, können Sie sich auf meine Lösung beziehen.

Als nächstes folgen zwei Artikel, einer befasst sich mit einer einfacheren Implementierungsmethode zum Schreiben geplanter Aufgaben und der andere erklärt Cron-Ausdrücke.

Das obige ist der detaillierte Inhalt vonBeispiel für die Implementierung von Spring+Quarz. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn