我正在尋找一種方法將數據從數據庫加載到HashMap中,並使所有根資源類和一些額外的提供程序類(ContainerRequestFilter的實現更精確)都可用。我發現,實現,其中我執行查詢並的ServletContextListener的contextInitialized方法中加載地圖,並將其設置爲ServletContext屬性的溶液:將自定義數據映射存儲爲ServletContext中的屬性?
@WebListener
public class ServletContextCaching implements ServletContextListener {
@Inject
private SomeBeanLocalInterface someBean;
@Override
public void contextDestroyed(ServletContextEvent sce) {
ServletContext context = sce.getServletContext();
context.removeAttribute("CUSTOM_DATA_MAP");
}
@Override
public void contextInitialized(ServletContextEvent sce) {
List<SomeEntity> someEntities = someBean.findAllActive();
Map<String, String> temp = new HashMap<String, String>();
for (SomeEntity e : someEntities) {
temp.put(e.getSomeKey(), e.getSomeValue());
}
ServletContext context = sce.getServletContext();
context.setAttribute("CUSTOM_DATA_MAP", temp);
}
}
它是很好的做法來存儲自定義數據(即屬性)servlet中上下文,從而使其可用於「所有人」?將REST服務中的一些數據從DB加載到內存映射中的建議做法是什麼?我很確定我不是第一個需要這個:)
我不認爲它應該在servlet中。你應該有一個包含這些數據的bean的單例實例,它可以被注入任何需要它的服務。 bean本身需要注入數據源,以便它在構建時可以讀取它。如果你看看你的注入框架如何構造單例,你可能會發現答案會消失。 – 2014-10-22 08:49:00