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()
?
Bài liên quan
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
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 methodrun()
của Spring Boot, 1 thread chạy methodinsertDB()
của classCrawler
. 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/
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.