В моем приложении загрузки Spring я пытаюсь выполнить некоторые задачи в фоновом режиме.Java Spring Boot - CommandLineRunner для операций Async db, которые выполняются в фоновом режиме
Получение данных из одного разряда и сохранение их в другом, каждые 30 минут.
Правильно ли сделать класс CommandLineRunner, который позаботится об этом с помощью @Async?
@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. –