簡體   English   中英

安排一個 Spring 批處理作業以每 4 小時重新啟動我的應用程序

[英]Schedule a Spring batch Job to restart my application in every 4 hours

我想每 4 小時安排一次作業,以每 4 小時重新啟動我的 spring 批處理應用程序。我正在使用下面的代碼,但它只是安排我的作業。我在應用程序啟動時運行的方法很少。那些方法沒有得到預定的

@EnableScheduling
public class App {
    private static ConfigurableApplicationContext context;

    private static final Logger logger = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) {
        BasicConfigurator.configure();
        context = SpringApplication.run(App.class, args);

    }

    @Scheduled(cron = "0 0 0/4 * * * ")
    public static void restart() {
        ApplicationArguments args = context.getBean(ApplicationArguments.class);
        logger.info("##### Scheduler Started #####"+System.currentTimeMillis());

        Thread thread = new Thread(() -> {
            context.close();
            logger.info("***Context Closed***"+System.currentTimeMillis());
            context = SpringApplication.run(App.class, args.getSourceArgs());
            logger.info("###### Context  Restarted "+ 
            System.currentTimeMillis());
        });

        thread.setDaemon(false);
        thread.start();
    }
 }

由於該方法是在構造函數中調用的,因此在初始化 bean 時會調用它。所以我每次都必須重新啟動我的應用程序

您不需要為此在每個計划中關閉/重新啟動應用程序上下文。 您可以在更適合您的用例的JobExecutionListener#beforeJob中移動任何初始化代碼。

解決此問題的另一種方法是創建一個 tasklet,該 tasklet 調用生成 json 文件(例如SystemCommandTasklet )的腳本,然后創建第二個步驟,使用 json 項目閱讀器讀取文件(文件名可以在兩個步驟之間共享通過執行上下文)。

在這兩種情況下,都無需像當前那樣在每個計划中關閉/重新啟動應用程序上下文。

暫無
暫無

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

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