分散タイミングタスクロックShedLock

7402 ワード

概要
Springは、タイミングタスクに容易に実現できるAPIを提供します.アプリケーションの複数のインスタンスが配備されていない前に有効です.Springは、デフォルトでは、複数のインスタンスのスケジューラ同期を処理するのではなく、各ノードで同時にジョブを実行します.ShedLockライブラリは、計画タスクがQuartzの代わりに1回しか実行できないことを確認します.ShedLockは、Mongo、Redis、Hazelcast、ZooKeeper、およびJDBCドライバベースのデータベースをサポートします.https://github.com/lukas-krecan/ShedLock
はじめに
shedlock-spring基本依存項目:
<dependency>
    <groupId>net.javacrumbs.shedlockgroupId>
    <artifactId>shedlock-springartifactId>
dependency>

さらに、異なるロックに対して、それぞれ異なる依存を追加します.JDBC(データベース)ロックの追加:
<dependency>
    <groupId>net.javacrumbs.shedlockgroupId>
    <artifactId>shedlock-provider-jdbc-templateartifactId>
dependency>

JDBCとJdbcTemplateは2つの異なるロックであることに注意してください.
ShedLockは、共有データベースを持つ環境にのみ適用されます.現在のロックに関する情報を格納するテーブルまたはドキュメントをデータベースに作成します.ShedLock用のPostgreSQLデータベース・テーブルを作成し、スケジューラ・ロックに関する情報を保持します.
CREATE TABLE shedlock(
  name VARCHAR(64),
  lock_until TIMESTAMP(3) NULL,
  locked_at TIMESTAMP(3) NULL,
  locked_by  VARCHAR(255),
  PRIMARY KEY (name)
)

Spring構成クラスの@EnableSchedulingと@EnableschedulerLockコメント:
@SpringBootApplication
@EnableScheduling
@EnableSchedulerLock(defaultLockAtMostFor = "PT30S")
public class SpringApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringApplication.class, args);
    }
}

defaultLockAtMostForパラメータは、ノードの実行終了時にロックを保持するデフォルトの時間量を指定します.ISO 8601 Duration形式を使用しています.
タスクメソッドの作成注記@Scheduledと@SchedulerLockコメントの追加:
@Component
class TaskScheduler {
	//  15  
    @Scheduled(cron = "*/15 * * * * *")
    @SchedulerLock(name = "TaskScheduler_scheduledTask", lockAtLeastForString = "PT5M", lockAtMostForString = "PT14M")
    public void scheduledTask() {
    }
}

@Scheduledはcron式をサポートしています.@SchedulerLock注記には、次の5つのパラメータがあります.
  • name:タイミングタスクの名前、すなわちデータベース内の内部プライマリ・キーは、
  • のみでなければなりません.
  • lockAtMostFor:ロックの最大時間単位はミリ秒
  • です.
  • lockAtMostForString:最大時間の文字列形式.たとえば、PT 30 Sは30秒
  • を表す.
  • lockAtLeastFor:ロックの最小時間単位はミリ秒
  • lockAtLeastForString:最小時間の文字列形式
  • 通常、ShedLockはタスクが完了した後、直接ロックを解除します.@EnableSchedulerLockではデフォルト値を指定します.
    リファレンス
    https://www.njlife.top/archives/shedlock-use