SpringBoot第十七章:定期的なタスク

著者:1819ドリーム
:オリジナルhttps://blog.csdn.net/weixin_39759846/article/details/93481921
著作権:この記事はブロガーのオリジナルの記事、再現され、ボーエンのリンクを添付してください!

 

入門

  私たちは、タスクのタイミングに非常に精通していると信じて、その重要性は自明です。タイミングは、テキストメッセージ、定期バッチ操作、タイミング統計などを送って、定期的なタスクから不可分です。この記事ではSpringBootプロジェクトにおけるアプリケーションタスクのタイミングを説明します。

 

バージョン情報

  • JDK:1.8
  • SpringBoot:2.0.1.RELEASE
  • Mavenの:3.3.9
  • IDEA:2019年1月1日
  • 石英:2.3.0

 

タスクの実施時期

JDKは、タイマーが付属しています

  タイマーは、定期的なタスクに付属しているJavaクラスです。タイミングは、比較的単純なタスクとして使用することができます。通常はあまりありません。以下は、その使用を実証するための小さな一例です。

 

SpringBoot統合スケジュール

このアプローチはSpringBoot、使いやすい統合されています。

まず、基礎はSpringBootジャーを導入しました:

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
  </dependency>

 

そして、注釈を追加するクラスを開始  @EnableScheduling SpringBoot定期的なタスクを開くには:

@SpringBootApplication
@EnableScheduling
public class TimedTaskDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(TimedTaskDemoApplication.class, args);
    }
}

 

応じて、以下の  @Scheduled いくつかのタスクを作成するために、異なる属性:

タスクを1:

@Component
public class FirstTask {
    /**
     * cron 表达式
     */
//    @Scheduled(cron = "0/2 * * * * *")
    @Scheduled(cron="${cron.schedule}")
    public void run(){
        System.out.println("这是创建的第一个定时任务");
    }
}

いくつかの説明のために:

  1. クーロン式である  @Scheduled 値直接クーロン式を設定することができる属性の一つ。
  2. @Scheduled(cron="${cron.schedule}") これは、動的な表現がcronの設定ファイルを読み込むapplication.propertiesです。たとえば、実行するために、毎日0時00分を必要としたプロジェクトが、テスターのため、朝テストまで待つことはできません。動的な読み込みは、問題を解決することができます。
     

タスク2:

@Component
public class SecondTask {
    /**
     * 上一次执行完毕时间点之后多长时间再执行(ms)
     */
    @Scheduled(fixedDelay = 2000)
    public void run(){
        System.out.println("这是创建的第二个定时任务");
    }
}

 

タスク3:

@Component
public class ThirdTask {
    /**
     * 与fixedDelay功能相同,上一次执行完毕时间点之后多长时间再执行(ms),区别是:1、时间是字符串;2、支持占位符
     */
    // @Scheduled(fixedDelayString = "2000")
    @Scheduled(fixedDelayString = "${time.fixedDelay}")
    public void run(){
        System.out.println("这是创建的第三个定时任务");
    }
}

 

三つのパラメータ@Scheduled注釈上に挙げた3つのタスク。実際には、@Scheduledソースを参照してくださいに加えて、いくつかの残りのパラメータがあることを示しています。

  • fixedRate:ポイントの後の時間にどのくらいの再実行で開始。
  • fixedRateString:ポイントの後の時間にどのくらいの再実行で開始。
  • fixedRateString:とfixedRate 同じ意味、文字列として以外。唯一の違いは、プレースホルダをサポートすることです。
  • initialDelayの:どのくらい最初の遅延実行前。
  • initialDelayString:同じ意味initialDelayの、文字列を使用したこと以外は。唯一の違いは、プレースホルダをサポートすることです。

 

クォーツ統合

  上記の方法は、プロジェクトのニーズを満たすことができない場合は、クォーツスケジューリングフレームワークを試すことができます。それは言っても過言ずにパワフルで使用しています。ここでは、SpringBootでクォーツを見てみましょう。

プロジェクト、クォーツスケジューリングフレームワークスタータの導入を作成します。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

 

  バージョン情報は、バージョン2.0の後SpringBootバージョン場合、直接導入することができる石英スターターに留意されたいです。それが2.0以前のバージョンである場合でも、あなたは次のjarパッケージを導入する必要があります。

<dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
</dependency>

 

以下は、タスクを作成します。

public class QuartzTask extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println(new Date());
    }
}

QuartzJobBeanタスクは、抽象クラスを継承し、executeInternalメソッドをオーバーライドする必要があります。

 

第3のステップは、追加、石英の設定クラスを作成することです  @Configuration 注釈を:

@Configuration
public class QuartzConfig {
    @Bean
    public JobDetail testQuartzTask() {
        return JobBuilder.newJob(QuartzTask.class).withIdentity("quartztask").storeDurably().build();
    }
    @Bean
    public Trigger testQuartzTrigger2() {
        //cron方式,每隔5秒执行一次
        return TriggerBuilder.newTrigger().forJob(testQuartzTask())
                .withIdentity("quartztask")
                .withSchedule(CronScheduleBuilder.cronSchedule("*/5 * * * * ?"))
                .build();
    }
}

  上記の例では、クーロンの表現の使用は、もちろん、一定の時間間隔であってもよいです。このセクションでは、クォーツとSpringBoot、クォーツの無いディテール使用の統合について説明します。関心のある読者は、クォーツの上でログインすることができ、公式サイト  や、中国の公式サイト独自の研究。

 

概要

  通常の実装タスクは、スレッドプールの実装を使用して言及した上記に加えて、多くの方法だけでなく、定期的なタスクがあるが、システムは、いくつかの定期的なタスクLiunxを達成することです。要するに、方法で、時限式のさまざまなタスクの実装では、選挙では、プロジェクトの実際の状況に応じながら、ということ。達成するために達成することはできません。



おすすめ

転載: blog.csdn.net/weixin_39759846/article/details/93481921