Spring Cloud Config - RefreshScope

Mình đang đọc trên doc: https://cloud.spring.io/spring-cloud-static/Greenwich.SR2/multi/multi__spring_cloud_context_application_context_services.html

RefreshScope works (technically) on an @Configuration class, but it might lead to surprising behavior. For example, it does not mean that all the @Beans defined in that class are themselves in @RefreshScope . Specifically, anything that depends on those beans cannot rely on them being updated when a refresh is initiated, unless it is itself in @RefreshScope . In that case, it is rebuilt on a refresh and its dependencies are re-injected. At that point, they are re-initialized from the refreshed Configuration ).

Mình vẫn chưa hiểu rõ về @RefreshScope tại class và mỗi bean từ đoạn trên. Mong mọi người có thể giải thích để mình hiểu rõ hơn. Cám ơn mọi người !

Về cơ bản, đoạn đó có nghĩa là, annotation @RefreshScope nếu được đặt ở class level (cùng level với @Configuration annotation) thì vẫn chạy, nhưng có thể không đúng như kỳ vọng của cậu. Hay nói cách khác, reference tất cả beans trong class mà cậu tag @RefreshScope không hẳn đều sẽ được refresh.
Chẳng hạn, khi cậu có 1 component nào đó phụ thuộc vào 1 bean trong class config được tag @RefreshScope ở class level (a.k.a phụ thuộc vào bean). Khi config được refresh, component kia vẫn giữ reference tới bean cũ của cậu, dẫn tới việc code cậu không thay đổi behavior.
Cách giải quyết là cậu tag @RefreshScope trực tiếp cho bean mà cậu muốn refresh. Khi bean này được refresh, component kia cũng sẽ được khởi tạo và reinject các phụ thuộc cho cậu.

Hope it helps!

3 Likes

Cám ơn c nhiều nhé vì đã giải thích rõ hơn giúp mình :sweat_smile:

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