私のSpringブートアプリケーションでは、バックグラウンドでいくつかのタスクを実行しようとしています。Java Spring Boot - 非同期db操作のためのCommandLineRunnerは、バックグラウンドで実行されます。
1つのデータベースからデータを取得し、それを別のデータベースに格納すると、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と組み合わせることを検討してください。 –