Tôi gặp sự cố khi làm mới hoặc tải lại một bean được quản lý phạm vi ứng dụng. Nó hoạt động như bean dữ liệu được lưu trữ. Vì vậy, một khi dữ liệu được thay đổi trên bên db, tôi muốn tải lại danh sách trong bean. Có cách nào để làm mới/tải lại danh sách, nói một lần một ngày dựa trên thời gian nhất định không? Cảm ơnLàm mới/Tải lại Phạm vi quản lý phạm vi ứng dụng
8
A
Trả lời
14
Chỉ cần thêm phương pháp vào bean được phủ phạm vi ứng dụng thực hiện chính xác điều đó.
public void reload() {
list = dao.list();
}
Sau đó lấy/tiêm hạt này vào đậu khác và gọi phương thức.
data.reload();
Cập nhật xin lỗi, tôi bỏ qua "một lần một ngày" bit. Bạn có nghĩa là tải lại tự động trong nền? Điều này là tốt nhất để đạt được bằng một chuỗi nền được quản lý bởi ScheduledExecutorService
. Tạo một ServletContextListener
thích sau:
@WebListener
public class Config implements ServletContextListener {
private ScheduledExecutorService scheduler;
@Override
public void contextInitialized(ServletContextEvent event) {
Reloader reloader = new Reloader(event.getServletContext());
scheduler = Executors.newSingleThreadScheduledExecutor();
scheduler.scheduleAtFixedRate(reloader, 1, 1, TimeUnit.DAYS);
}
@Override
public void contextDestroyed(ServletContextEvent event) {
scheduler.shutdownNow();
}
}
đâu giao diện lớp Reloader
như thế này (giả định rằng tên bean được quản lý là data
)
public class Reloader implements Runnable {
private ServletContext context;
public Reloader(ServletContext context) {
this.context = context;
}
@Override
public void run() {
Data data = (Data) context.getAttribute("data");
if (data != null) {
data.reload();
}
}
}
Các vấn đề liên quan
- 1. Phạm vi quản lý và tuổi thọ đối tượng Trong phạm vi STL Vectors
- 2. Phạm vi của Trình quản lý tải là gì?
- 3. Biến phạm vi ứng dụng trong Flask?
- 4. Phạm vi gọi lại JavaScript
- 5. Vi phạm bản quyền, vi phạm bản quyền, vi phạm bản quyền. Tôi có thể làm gì?
- 6. Phạm vi người dùng vs Phạm vi ứng dụng trong app.config
- 7. Phạm vi Lambda Làm rõ
- 8. Phạm vi liên kết phạm vi C tiêu chuẩn
- 9. Làm thế nào để chấm dứt một sợi trong một phạm vi xem phạm vi đậu?
- 10. Sử dụng biến phạm vi ứng dụng trong java
- 11. python biến phạm vi
- 12. Vi phạm mẫu MVVM: MediaElement.Play()
- 13. Phạm vi mã PHPUnit
- 14. thử phạm vi khối
- 15. Phạm vi QUnit + coffeescript
- 16. Lambda biến phạm vi
- 17. Java Phạm vi tĩnh
- 18. JSF phạm vi ứng dụng instantiation và tiêm
- 19. Phạm vi của typedefs
- 20. về phạm vi ruby?
- 21. Phạm vi @@ rowcount?
- 22. Sinatra Variable Phạm vi
- 23. Phạm vi ở Erlang
- 24. Làm thế nào để xóa một đối tượng của phiên quản lý phạm vi đậu?
- 25. Phạm vi của XACT_ABORT
- 26. Enumeration Phạm vi
- 27. Phạm vi trong JSF 2
- 28. Phạm vi giá trị R.id
- 29. Phạm vi cuộc trò chuyện có thay thế thích hợp cho phạm vi xem không?
- 30. java.lang.SecurityException: niêm phong vi phạm:
Cảm ơn @BalusC nhiều – leo
Bạn đang chào đón. Tuy nhiên, bạn phải cực kỳ cẩn thận với việc quản lý các luồng trong một servletcontainer. 'Scheduler.shutdownNow();' bit trong 'contextDestroyed()' là rất quan trọng. Bạn có thể xem xét ủy quyền công việc quản lý luồng cho servletcontainer, nếu nó hỗ trợ nó. JBoss có ví dụ Quartz cho điều này, Glassfish có ví dụ 'WorkManager' cho việc này. Trong Tomcat, ví dụ trên là đặt cược tốt nhất của bạn. – BalusC
@BalusC Tôi có cùng nhu cầu. Tôi đã thực hiện điều này trong ứng dụng của mình. Vấn đề duy nhất là trong phương thức 'Reloader'' run() 'bean của tôi luôn là null. Bạn có thể gợi ý cho tôi không – leostiw