[英]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.