在我的Spring Boot應用程序中,我試圖在後臺執行一些任務。Java Spring Boot - 用於在後臺運行的異步數據庫操作的CommandLineRunner
從一個數據庫獲取數據,並將其存儲在另一個數據庫中,每隔30分鐘保存一次。
使用@Async創建一個處理此問題的CommandLineRunner類會是正確的嗎?
@Component
public class UpdateDB implements CommandLineRunner {
@Autowired
private WagerBoardMarksRepo loadRepo;
@Autowired
private StoreDbEntRepo storeRepo;
@Async
private static void update() {
while (true) {
// get data from loadRepo.
// save data to storeRepo
try {
Thread.sleep("sleep for 30min"); //
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void run(String... args) throws Exception {
update();
}
}
這不起作用,因爲它首先是一個內部方法調用(由於AOP的代理不起作用)。其次,你不能將'@ Async'應用於'static'方法。所以它根本無法工作。 「@ Scheduled」是爲此而發明的,不要試圖再次創建自己的。如果你有大量的數據,你可能需要考慮將其與Spring Batch結合起來。 –