著者: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("这是创建的第一个定时任务");
}
}
いくつかの説明のために:
- クーロン式である
@Scheduled
値直接クーロン式を設定することができる属性の一つ。 @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を達成することです。要するに、方法で、時限式のさまざまなタスクの実装では、選挙では、プロジェクトの実際の状況に応じながら、ということ。達成するために達成することはできません。