簡體   English   中英

Spring:如何在應用程序的多個實例之一中鎖定調度程序

[英]Spring: how to lock the scheduler in one of several instances of the application

我的應用程序有一個調度程序,它每 10 秒從數據庫請求一次數據並對其進行處理。 我可以運行 2 個應用程序實例:第一個是不斷運行的開發服務器,第二個是我的本地服務器。 兩個實例都從同一個數據庫中獲取數據。 問題是當我在本地進行編輯並想要測試它們時,因為開發服務器正在運行,它可以在本地服務器之前攔截和處理我的數據。 這可能會發生多次,並且非常令人不安。 有什么辦法可以讓只有我的本地實例在調度程序中執行任務,而開發服務器只是跳過它? 我的意思是我需要我的本地調度程序每 10 秒按計划運行一次,並且開發服務器上的調度程序在我的本地實例運行時跳過了該任務。 可能嗎? 或者有沒有圖書館?

對此有許多可能的解決方案。 “最干凈”的方法是將數據庫分開,這樣您的本地應用程序就不會連接到開發服務器的數據庫,而是會維護一些在本地運行的數據庫。

另一種可能的解決方案是將計划作業重構為僅在某種自定義配置上運行,以便在開發配置文件(您可能使用 spring 配置文件或代碼中的“條件”)上,調度程序根本不會運行。 在開發服務器上,默認情況下會啟用此配置,並且調度將照常運行。

例如,您可以使用這個

    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-spring</artifactId>
    </dependency>
    <dependency>
        <groupId>net.javacrumbs.shedlock</groupId>
        <artifactId>shedlock-provider-jdbc-template</artifactId>
    </dependency>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM