検索
ホームページJava&#&チュートリアルJavaタイマーのいくつかの方法

Javaタイマーのいくつかの方法

Dec 16, 2016 pm 01:19 PM
Javaタイマー

quartz

spring

spring-task

タイミングタスク

Notes

Springタイミングタスクのいくつかの実装

最近、初期の分析など、いくつかのタイミングタスクをプロジェクト開発中に実行する必要があります。毎日朝この機会に、スケジュールされたタスクを実装するためのいくつかの方法を整理しました。プロジェクトでは Spring フレームワークを使用しているため、

Spring フレームワークと併せて紹介します。

1.分類

実装テクノロジーの観点から分類すると、現在 3 つの主要なテクノロジー (または 3 つの製品) があります:

Java 独自の java.util.Timer クラス。このクラスを使用すると、 java.util.TimerTask タスクをスケジュールできます。この方法を使用すると、指定した時間ではなく、特定の頻度でプログラムを実行できます。一般的にはあまり使われないので、この記事では詳しく紹介しません。

Quartz を使用します。これは、プログラムを指定した時間または頻度で実行できるようにする、比較的強力なスケジューラーです。構成は少し複雑なので、後で詳しく紹介します。

Spring 3.0 以降に付属するタスクは軽量の Quartz とみなすことができ、後で紹介する Quartz よりもはるかに簡単に使用できます。

ジョブクラスの継承方法に関しては、次の 2 つのカテゴリに分類できます。

ジョブクラスは特定のジョブクラスの基本クラスから継承する必要があります。例: Quartz は org.springframework.scheduling.quartz から継承する必要があります。 .QuartzJobBean; java .util.Timer は java.util.TimerTask から継承する必要があります。

ジョブ クラスは通常の Java クラスであり、基本クラスから継承する必要はありません。

注: すべてのクラスは共通クラスであり、事前に特別に処理する必要がないため、個人的には 2 番目の方法を使用することをお勧めします。

タスクスケジューリングのトリガータイミングから、ジョブに使用されるトリガーは主に以下の2種類があります:

指定時間ごとに1回トリガー、Quartzでの対応するトリガーはorgです。 .springframework.scheduling.quartz.SimpleTriggerBean

指定された時間ごとに 1 回トリガーされます。Quartz の対応するスケジューラーは次のとおりです。 org.springframework.scheduling.quartz.CronTriggerBean

注: すべてのタスクが使用できるわけではありません。たとえば、java.util.TimerTask タスクは最初のタスクのみを使用できます。 Quartz と Spring タスクは両方とも、これら 2 つのトリガー条件をサポートできます。

Ⅱ。使い方

QuartzやSpringタスクなど、各タスクスケジューリングツールの使い方を詳しく紹介します。

Quartz

最初のタイプのジョブ クラスは、特定の基本クラス org.springframework.scheduling.quartz.QuartzJobBean を継承します。

ステップ 1: ジョブ クラスを定義する

Java コード

import org.quartz.JobExecutionException;

import org.springframe work.s scheduling.quartz.QuartzJobBean ;

public class Job1 extends QuartzJobBean {

private int timeout;

private static int i = 0;

// スケジュール設定はタイムアウト時間後に開始されます

int timeout) {

this.timeout = タイムアウト

}

/**

* スケジュールされる特定のタスク

*/

@Override

protected voidexecuteInternal(JobExecutionContext context)

throws JobExecutionException {

システムが終了しました。 .println( "スケジュールされたタスクが実行されています...");

}

}

ステップ 2: Spring 構成ファイルでジョブ クラス JobDetailBean を構成します

Xml コード

説明: org.springframework.scheduling .quartz.JobDetailBean には 2 つの属性があります。jobClass 属性は Java コードで定義したタスク クラスであり、jobDataAsMap 属性はタスク クラスに注入する必要がある属性値です。

ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構成する

Quartz には 2 つのジョブ トリガーがあります。

org.springframework.scheduling .quartz.CronTriggerBean

最初の SimpleTriggerBean は、30 分に 1 回の実行など、特定の頻度でのタスクの呼び出しのみをサポートします。

設定方法は以下の通りです:

Xml コード

th 2 種類の CronTriggerBean は、毎日 12:00 など、指定した時刻に 1 回実行することをサポートします。

設定方法は以下の通りです。

Xmlコード

}

}

これは通常のクラスであり、メソッドがあることがわかります。

ステップ 2: ジョブ クラスの構成

Xml コード

class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

説明: このステップは重要なステップです。MethodInvokingJobDetailFactoryBean を宣言します。 , 重要な属性が 2 つあります。targetObject はタスク クラスを指定し、targetMethod は実行するメソッドを指定します。次の手順は方法 1 と同じです。完全を期すために、それらの手順も掲載します。

ステップ 3: ジョブ スケジューリングのトリガー方法 (トリガー) を構成する

Quartz には 2 つのジョブ トリガーがあります。

org.springframework.scheduling .quartz.CronTriggerBean

最初の SimpleTriggerBean は、30 分に 1 回の実行など、特定の頻度でのタスクの呼び出しのみをサポートします。

設定方法は以下の通りです:

Xmlコード

;property name ="repeatInterval" value="2000" />

2 番目の CronTriggerBean は、指定された時間に 1 回の実行をサポートします。 1日1回12:00に実行されるなど。

設定方法は以下の通りです:

Xmlコード

xmlns :task="http://www.springframework.org/schema/task"

. 。 。 。 。 。

xsi:schemaLocation="http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

第三ステップ: Spring 構成ファイル

Xml コード

で特定のタスクを設定します。 "/> つまり、タスク クラスです。method で指定されたメソッドは、実行する必要があるメソッド cron です。具体的な記述方法については、前回の記事の付録を参照してください。

言うまでもなく、この構成はスプリング スキャンのアノテーションに使用されます。

これで設定は完了です。とても簡単ですね。

2 番目: アノテーション フォームを使用する

タスク クラスを作成するたびに XML ファイルで設定する必要はないかもしれません。このアノテーションの定義を見てみましょう。ソース ファイル内:

Java コード

@Target({java.lang.annotation.ElementType.METHOD, java.lang.annotation.ElementType.ANNOTATION_TYPE})

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @Interfaceスケジュール{

パブリックアブストラクトロングデレイ(); : cron 式を指定します

fixedDelay: 公式ドキュメントの説明: 前のタスクの完了時間から間隔を測定する間隔ベースのトリガー。時間単位の値は、前のタスクの完了から開始までの間隔を意味します。次のタスク、単位はミリ秒です。

fixedRate: 公式ドキュメントの説明: 間隔は、前のタスクの開始時刻から、つまり、前のタスクの開始からミリ秒単位で測定される間隔ベースのトリガーです。次のタスクの開始間隔 (ミリ秒)。

それでは、設定してみましょう。

ステップ 1: pojo を書く

Java コード

import org.springframework.scheduling.annotation.Scheduled;

@Component("taskJob")

public class TaskJob {

@Scheduled(cron = "0 0 3 * * ?")

public void job1() {

System.out.println("タスク進行中...") }

}

ステップ 2: タスク関連の設定を追加します:

Xml コード

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org. /schema/aop"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xmlns :task="http://www.springframework.org/schema/task"

/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http ://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd

http://www.springframework.org/schema/ tx http://www.springframework.org/schema/tx/spring -tx-3.0.xsd

/spring-task-3.0.xsd"

default-lazy-init="false" >

->

注: 理論的には、構成文 。これらのパラメータは必須ではありません。

もちろん、Spring タスクにはまだ多くのパラメータがあります。詳細については、xsd ドキュメント http://www.springframework を参照してください。 org/schema/task/spring-task-3.0.xsd。

付録:

cronExpression の構成手順、具体的な使用法およびパラメータについては、Baidu google

フィールド 許可される値 許可される特殊文字

秒 0 ~ 59 、 - * /

ポイント 0-59 、 - * /

時間 0-23 、 - * /

日付 1-31 、 - * ? / L W C

月 1-12 または 1 月-12 月 、 - * /

平日 1 ~ 7 または SUN ~ SAT 、 - * ? / L C #

年 (オプション) 空白のまま、1970 ~ 2099 、 - * /

-間隔

*

そのフィールドを設定したくないですか

ここにいくつかの例があります

CRON 式 意味

「0 0 12 * * ?」 毎日正午にトリガーされます

「0 15 10 ? * *」 毎朝 10:15 にトリガーされます

「0 15 10 *」 * ?" 毎朝 10:15 にトリガーされます

"0 15 10 * * ? *" 毎朝 10:15 にトリガーされます

"0 15 10 * * 2005" 毎朝 10:15 にトリガーされます2005 年

「0 * 14 * * ?」 毎日午後 2 時から 2 時 59 分まで 1 分ごとにトリガーされます

「0 0/5 14 * * ?」 毎日午後 2 時から 2 時まで: 5 分ごとにトリガーされます55 分終了時の分

「0 0/5 14,18 * * ?」 毎日午後 2 時から 2 時 55 分と午後 6 時から 6 時 55 分の 2 つの時間帯で 5 分ごとにトリガー

「0 0-5 14 * * ?」 毎日 14:00 から 14:05 まで毎分トリガーします

「0 10,44 14 ? 3 WED」 3 月の毎週水曜日 14:10 にトリガーします14:44

「0 15 10? * MON-FRI」毎週月曜日、火曜日、水曜日、木曜日、金曜日の 10:15 にトリガー




その他 いくつかのメソッドに関連する記事Java タイマーの場合は、PHP 中国語 Web サイトに注意してください。


声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Javaアプリケーションでプラットフォーム固有の問題を緩和するためのいくつかの戦略は何ですか?Javaアプリケーションでプラットフォーム固有の問題を緩和するためのいくつかの戦略は何ですか?May 01, 2025 am 12:20 AM

Javaはプラットフォーム固有の問題をどのように軽減しますか? Javaは、JVMおよび標準ライブラリを通じてプラットフォームに依存します。 1)bytecodeとjvmを使用して、オペレーティングシステムの違いを抽象化します。 2)標準のライブラリは、パスクラス処理ファイルパス、CHARSETクラス処理文字エンコードなど、クロスプラットフォームAPIを提供します。 3)最適化とデバッグのために、実際のプロジェクトで構成ファイルとマルチプラットフォームテストを使用します。

Javaのプラットフォームの独立性とマイクロサービスアーキテクチャの関係は何ですか?Javaのプラットフォームの独立性とマイクロサービスアーキテクチャの関係は何ですか?May 01, 2025 am 12:16 AM

java'splatformentencentenhancesmicroservicesecturectureby byofferingdeploymentflexability、一貫性、スケーラビリティ、およびポート可能性。1)展開の展開の展開は、AllosmicRoserviThajvm.2)deploymentflexibility lowsmicroserviceSjvm.2)一貫性のあるAcrossServicessimplisimpligiessdevelisementand

GraalvmはJavaのプラットフォーム独立目標とどのように関係していますか?GraalvmはJavaのプラットフォーム独立目標とどのように関係していますか?May 01, 2025 am 12:14 AM

Graalvmは、Javaのプラットフォームの独立性を3つの方法で強化します。1。言語間の相互運用性、Javaが他の言語とシームレスに相互運用できるようにします。 2。独立したランタイム環境、graalvmnativeimageを介してJavaプログラムをローカル実行可能ファイルにコンパイルします。 3.パフォーマンスの最適化、Graalコンパイラは、Javaプログラムのパフォーマンスと一貫性を改善するための効率的なマシンコードを生成します。

プラットフォームの互換性についてJavaアプリケーションをどのようにテストしますか?プラットフォームの互換性についてJavaアプリケーションをどのようにテストしますか?May 01, 2025 am 12:09 AM

aeffectivelytestjavaapplicationsforformcompativity、followthesesteps:1)setupautomatedacrossmultipleplatformsusingsingcitoolslikejenkinsorgithubactions.2)divivisonmanualtingonrealhardwaretocatissusuessususus.3)

プラットフォームの独立性を達成する上でのJavaコンパイラ(Javac)の役割は何ですか?プラットフォームの独立性を達成する上でのJavaコンパイラ(Javac)の役割は何ですか?May 01, 2025 am 12:06 AM

Javaコンパイラは、ソースコードをプラットフォームに依存しないバイトコードに変換することにより、Javaのプラットフォームの独立性を実現し、JVMがインストールされた任意のオペレーティングシステムでJavaプログラムを実行できるようにします。

プラットフォームの独立性のためにネイティブコードを介してbytecodeを使用することの利点は何ですか?プラットフォームの独立性のためにネイティブコードを介してbytecodeを使用することの利点は何ですか?Apr 30, 2025 am 12:24 AM

bytecodeachievesplatformedentencedexedectedbyavirtualMachine(VM)、forexApplev.forexample、javabytecodecanrunrunrunnonydevicewithajvm、writeonce、runany "ferfuctionality.whilebytecodeOffersenhの可能性を承認します

Javaは本当に100%プラットフォームに依存していませんか?なぜまたはなぜですか?Javaは本当に100%プラットフォームに依存していませんか?なぜまたはなぜですか?Apr 30, 2025 am 12:18 AM

Javaは100%のプラットフォームの独立性を達成することはできませんが、そのプラットフォームの独立性はJVMとBytecodeを通じて実装され、コードが異なるプラットフォームで実行されるようにします。具体的な実装には、次のものが含まれます。1。bytecodeへのコンパイル。 2。JVMの解釈と実行。 3。標準ライブラリの一貫性。ただし、JVMの実装の違い、オペレーティングシステムとハードウェアの違い、およびサードパーティライブラリの互換性は、プラットフォームの独立性に影響を与える可能性があります。

Javaのプラットフォーム独立性は、コードの保守性をどのようにサポートしますか?Javaのプラットフォーム独立性は、コードの保守性をどのようにサポートしますか?Apr 30, 2025 am 12:15 AM

Javaは、「Write onse、Averywhere」を通じてプラットフォームの独立性を実現し、コードの保守性を向上させます。 2。メンテナンスコストが低いため、1つの変更のみが必要です。 3.チームのコラボレーション効率が高く、知識共有に便利です。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター