Insert dữ liệu vào database theo chu kỳ khi chương trình Spring Boot đang chạy

Mình đang xây dựng 1 hệ thống website bằng Spring Boot. Hệ thống của mình có 1 class để crawl dữ liệu từ nguồn khác và lưu luôn vào database (ví dụ là class Crawler.java), quá trình này thực hiện liên tục để dữ liệu luôn được cập nhật mới.
Mình muốn hỏi có từ khóa nào về phương pháp chạy class Crawler này ngay lúc hệ thống khởi động không (tức là Crawler sẽ khởi tạo và chạy cùng với method run()?

Bạn có thể thử cách này

2 Likes

Cảm ơn bạn :smile: Mình hiện đang ở công ty nên không thử được, nên không biết cách này liệu có thực thi code liên tục (ví dụ là 5phút 1 lần) đến khi chương trình Spring Boot ngừng không.
Ngoài cách trên ra mình thử dùng Thread: 1 thread chạy method run() của Spring Boot, 1 thread chạy method insertDB() của class Crawler. Kết quả là cũng chạy được nhưng không biết có tốt bằng code dùng @PostConstruct như của bạn không. Bạn nào biết thì xác nhận giúp mình nhé.

Muốn vậy phải tạo thread rồi lên schedule thôi
Spring có hổ trợ spirng-quartz
https://www.mkyong.com/spring/spring-quartz-scheduler-example/

3 Likes

Một cách khác nữa là @Component của bạn implements InitializingBean, sau đó override afterPropertiesSet(), nhét code lấy data của bạn vào nó sẽ thực thi sau khi các property của Component đó đã được khởi tạo. Để lập lại việc lấy data 5p một lần thì sử dụng ScheduledExecutorService.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?