01/10/2018, 15:32

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()?

Phan Bá Hải viết 17:42 ngày 01/10/2018

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

Medium – 23 Jan 17

Spring Boot: Startup init through @PostConstruct – David Marko – Medium

There are frequent situations when application requires to run custom code while starting up.

Reading time: 1 min read

Kamui Ka viết 17:37 ngày 01/10/2018

Cảm ơn bạn 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é.

Nguyen Ca viết 17:43 ngày 01/10/2018

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/

Demon Hunter viết 17:38 ngày 01/10/2018

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.

Bài liên quan
0