ホームページ >Java >&#&チュートリアル >Spring でタイミング スケジューリングを実装するためのいくつかの方法
この記事では、主に Spring のタイミング スケジューリングの例を紹介します。システムは、誰も勤務していないときに特定の機能を実行できます。興味のある方は詳細をご覧ください。
1. 内容の紹介
いわゆるスケジュールされたスケジューリングとは、システムが勤務者がいない特定の時間に特定の機能を実行するために使用できるメカニズムを指します。フォーム:
スケジュールされたトリガー: 特定の時点で特定の処理操作を実行します。
インターバル トリガー: 数秒ごとに特定の操作の自動処理を実行します。
すべての処理は、コンピューター システムの下部にあるクロック ジェネレーターに依存します。Java の初期実装プロセスでは、Timer と TimerTask という 2 つのクラスが特に提供されており、そのうちの TimerTask は主にタスクの実行を定義します。これは、特定のタスクを実行するためにスレッドを開始することと同じです。
public class MyTask extends TimerTask{ @Override public void run() {//定义要执行的任务 // TODO Auto-generated method stub String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); System.out.println(currentTime); } } public class MyTaskTest { public static void main(String[] args) { Timer timer=new Timer(); timer.schedule(new MyTask(), 1000);//启动任务,延迟1秒后执行。 } }
しかし、毎年特定の月の特定の時刻、分、秒にタスクを実行する必要がある場合、Timer と TimerTask を使用してできることはありません。プロジェクト開発では、タイミング制御には 2 つの選択肢があることがよくあります:
quartz コンポーネント: エンタープライズおよびタイミング スケジューリング コンポーネント。個別に構成する必要があります。
SpringTask: 軽量コンポーネントで、構成が簡単で、アノテーションを使用して構成処理を実装できます。 。
2. Quartz はタイミング スケジューリングを定義します
Quartz コンポーネントを使用するには、Quartz 開発パッケージをインポートし、pom.xml に Quartz 開発パッケージを追加する必要があります。
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.2.3</version> </dependency>
パッケージを導入した後は、スケジュールされたスケジューリングを開発できます。
2 つの実装モードがあります:
QuartzJobBean 親クラスを継承します。
設定を直接使用してメソッドのスケジュール制御を実現できます。
1. 親クラスを継承してタスク処理を実装します。
public class MyTask2 extends QuartzJobBean{ @Override protected void executeInternal(JobExecutionContext context) throws JobExecutionException { // TODO Auto-generated method stub String currentTime=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); System.out.println(currentTime); System.out.println("具体的任务实现!!!"); } }
すべてのスケジュールされたスケジューリングは Spring の制御ファイルで有効にする必要があります。つまり、スケジュールされたタスクを有効にするために明示的なクラスを記述する必要はありません。
2. applicationContext.xml ファイルにタイミング スケジューリング構成を追加し、タイミング スケジューリング ファクトリ クラスを通じて実装します。
<bean id="taskFactory" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="cn.wnh.timerSask.MyTask1" /> <property name="jobDataMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
次に、タスクのトリガージョブを設定します:
インターバルトリガーを使用する: 一定期間後に実行を繰り返す
ファクトリクラス: org.springframework.scheduling。現時点では、すべての間隔トリガー制御は Spring によってのみ管理されます。 Spring コンテナを開始する必要がある場合は、間隔でトリガーされるタスクを実装できます。
Cron を使用してスケジュールされたトリガーを実現します
Quartz はインターバルトリガーを実現できるだけでなく、Cron と組み合わせてスケジュールされたトリガーを実現することもできます。これは最も重要な機能でもあります。
一般的なプロジェクトで最もよく使用されるモード: 正時にトリガー、月の初めにトリガー、年の初めにトリガー。
前の間隔トリガー構成を変更し、CronTriggerFactoryBean を使用してスケジュールされたトリガーを実装します。
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean"> <!-- 定义间隔触发的执行程序类 --> <property name="jobDetail" ref="taskFactory"></property> <!-- 设置定时触发延迟时间 --> <property name="startDelay" value="0"></property> <!-- 单位是”毫秒“ --> <property name="repeatInterval" value="2000"></property> </bean>
Spring コンテナを起動するだけです。
2. クラスを継承せずにタイミング スケジューリングを実装する
プロジェクト開発では、継承は単一継承の制限された制御に直接つながります。この場合、Spring はクラスを継承せずにタイミング操作を実装する方法を提供します。
タスク実行クラスを定義し、クラスを継承しません。
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="simpleTrigger" /> </list> </property> </bean>
applicationContext.xml でファクトリ クラスを設定します: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean
<bean id="taskFactory" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <property name="jobClass" value="cn.wnh.timerSask.MyTask1" /> <property name="jobDataMap"> <map> <entry key="timeout" value="0" /> </map> </property> </bean>
次に、タスク スケジュール設定で新しいプログラム クラスを設定します
りー
コンテナを起動して、スケジュールされたスケジュールを実装します。
このモードにはクラス継承の依存関係がなく、処理はより柔軟になります。
Spring Task はスケジュールされたスケジューリングを実装します
Spring はスケジュールされたスケジューリングを独自にサポートしており、Quartz よりもさらに使いやすいと感じます。
2 つの実装方法があります。1. applicationContext.xml で実装を構成します。2. アノテーションを使用して実装します。
ただし、どのモードを使用する場合でも、まずタスク処理クラスを作成する必要があります。
タスク処理クラスを定義します。
ここでは、前の MyTask2 クラスを書き換えずに直接使用します。
applicationContext.xml ファイルを変更します:
タスク処理の名前空間定義を追加する必要があります:
public class MyTask2 { public void taskSelf(){ String task=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new java.util.Date()); System.out.println(task); System.out.println("执行具体任务操作"); } }
1 間隔トリガーを実現するようにタスク操作の構成を構成します。
<bean id="taskFactory2" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <bean class="cn.wnh.timerSask.MyTask2" /> </property> <!--配置要执行的方法 --> <property name="targetMethod" value="taskSelf" /> </bean>
cron を使用してスケジュールされたトリガーを実装します
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <property name="jobDetail" ref="taskFactory2" /> <!-- cron表达式,描述每分钟触发一次 --> <property name="cronExpression" value="* * * * * ?" /> </bean>
SpringTask の方が実装が簡単であることがわかります。
以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。
Spring でタイミング スケジューリングを実装するいくつかの方法に関するその他の関連記事については、PHP 中国語 Web サイトに注目してください。