友人のプロジェクトに問題があります。彼の側は Spring アーキテクチャに基づいており、スケジュールされた実行を必要とする比較的単純なタスクを持っています。彼のニーズを理解した後、彼は比較的単純な Spring+quartz の実装を提案しました。
この記事では、完了した Spring プロジェクトで最も単純なスケジュールされたタスクを完了する方法のみを説明していることに注意してください。
最初のステップは、非常に興味深く興味深い Spring アーキテクチャを知ることです。機能モジュールを自由に抜き差しできる効果が得られます。プロジェクトは MAVEN パッケージの依存関係管理に基づいているため、今回必要な依存関係パッケージの参照をリストします:
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 <!-- 定时器依赖 结束 -->
もちろん、これは対応する Spring バージョンと一致する必要があります。ここでのプロジェクトは 4.0.2 です。以前のパッケージ spring-context-support は、主に Spring と Quartz の間の通信と管理のためのコンポーネントとして使用されます。コメントアウトされている場合、このようなエラーが報告されます
MAVEN が必要なパッケージを設定した後。追加 (他のパッケージ。当面はここでは展開しません。この記事では、完全な Spring プロジェクトの下での構成についてのみ説明します)。スケジュールされたタスクの機能モジュールをこのプロジェクトに追加し始めることができます。
2 番目のステップは、Web プロジェクトの原点から開始して、web.xml に変更を加えることです。元のプロジェクトのSpring設定ファイルはSpring-mvc.xmlだったので、スケジュールされたタスクの設定ファイルをspring-time.xmlに変更しました。このようにして、同じスキャンの構成を起動時に読み取ることができます。具体的なコードは次のとおりです:
1 <context-param>2 <param-name>contextConfigLocation</param-name>3 <param-value>classpath:spring-*.xml</param-value>4 </context-param>
次に、私のプロジェクトの構造を示します。 ’ s ‐ to
t------
と呼ばれます。このステップを完了したら、引き続き先に進むことができます
3 番目のステップは、spring-timer.xml スケジュールされたタスクのコア構成を完了することです。このファイル構成では、主に 3 つのことを完了します:
1. 遅延ロードに関する起動設定を構成します (簡単に言うと、たとえば、特定の変数を null に初期化することも一種の遅延ロードです。サービスが開始されると、実際に呼び出されたときにのみインスタンス化されます。それ以外の場合は、論理的にスペースを節約できますが、長い遅延の後に問題が発見される可能性もあります。
2.quartz-2.x の設定には、スケジュールされたタスクがトリガーされた後に呼び出されるジョブの名前と corn 式 (つまり、プログラムをいつ実行するかを制御するスケジュールされた式 (cron 式については後で追加します); 3. ジョブの内容とジョブに対応する特定のクラスを設定します。
ロジック プロセスの説明が完了したので、コードを次に示します。
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>
ここで構成ファイルの構成が完了したら、次のステップを開始できます。具体的なビジネス ロジックが実装されます。 4 番目のステップは、特定のビジネス ロジックの実装です。
ここで注意すべき点は、下の図の2つの点です
上の図は特定の業務実装クラスであり、内部の名前は図のスケジュールされたタスク構成と同じである必要があります下に。
上記の作業を完了したら、プロジェクトを開始して実際の効果を確認できます。
ここで、スケジュールされたタスクが、以前の設定である次の記事は 2 つあり、1 つはスケジュールされたタスクを記述する簡単な実装方法、もう 1 つは cron 式について説明します。
以上がSpring+quartzの実装例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。