Dans mon application de démarrage de printemps, j'essaie de faire quelques tâches en arrière-plan.Java Spring Boot - CommandLineRunner pour les opérations Async db qui s'exécute en arrière-plan
Obtention de données à partir d'une base de données et stockage dans une autre, toutes les 30 minutes.
Serait-il correct de créer une classe CommandLineRunner qui s'occupe de cela avec @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();
}
}
Cela ne fonctionnerait pas parce que d'abord un appel de méthode interne (ne fonctionne pas en raison de proxies pour AOP). Deuxièmement, vous ne pouvez pas appliquer les méthodes '@ Async' aux méthodes' static'. Donc ça ne marchera tout simplement pas. '@ Scheduled' est inventé pour cela, n'essayez pas de créer le vôtre à nouveau. Si vous avez de grandes quantités de données, vous pouvez envisager de combiner cela avec Spring Batch. –