Tôi đã có một ứng dụng trang duy nhất trên nhập URL nó đã tạo ra một HashMap (được trang web của tôi sử dụng) chứa dữ liệu từ nhiều cơ sở dữ liệu. tôi đã điều sau đây để tải tất cả mọi thứ trong máy chủ bắt đầu tốn nhiều thời gian
1- Tạo ContextListenerClass
public class MyAppContextListener implements ServletContextListener
@Autowired
private MyDataProviderBean myDataProviderBean;
public MyDataProviderBean getMyDataProviderBean() {
return MyDataProviderBean;
}
public void setMyDataProviderBean(
MyDataProviderBean MyDataProviderBean) {
this.myDataProviderBean = MyDataProviderBean;
}
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("ServletContextListener destroyed");
}
@Override
public void contextInitialized(ServletContextEvent context) {
System.out.println("ServletContextListener started");
ServletContext sc = context.getServletContext();
WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(sc);
MyDataProviderBean MyDataProviderBean = (MyDataProviderBean)springContext.getBean("myDataProviderBean");
Map<String, Object> myDataMap = MyDataProviderBean.getDataMap();
sc.setAttribute("myMap", myDataMap);
}
2- Thêm bên dưới mục trong web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.context.listener.MyAppContextListener</listener-class>
</listener>
3- Trong điều khiển Lớp của tôi đã cập nhật mã để kiểm tra Bản đồ đầu tiên trong servletContext
@RequestMapping(value = "/index", method = RequestMethod.GET)
public String index(@ModelAttribute("model") ModelMap model) {
Map<String, Object> myDataMap = new HashMap<String, Object>();
if (context != null && context.getAttribute("myMap")!=null)
{
myDataMap=(Map<String, Object>)context.getAttribute("myMap");
}
else
{
myDataMap = myDataProviderBean.getDataMap();
}
for (String key : myDataMap.keySet())
{
model.addAttribute(key, myDataMap.get(key));
}
return "myWebPage";
}
Với sự thay đổi này nhiều khi tôi bắt đầu tomcat của tôi nó tải dataMap trong startTime và đặt mọi thứ trong servletContext mà sau đó được sử dụng bởi Controller Class để có được kết quả từ servletContext đã được điền sẵn.
Nguồn
2016-04-20 11:03:05
ok, cảm ơn.bạn nên biết rằng spring3 lọc các sự kiện. Tôi đã chú ý đến lớp ứng dụng trước đây. nhưng các móc của nó cũng sẽ được gọi cho RequestHandledEvent. –
Bất kỳ ý tưởng gì sẽ xảy ra nếu bạn sử dụng các công cụ chú thích và bạn khai báo hai lớp? Không chú thích (XML) và hai? Họ sẽ bắn theo thứ tự tuyên bố? thanks;) – momomo
Chỉ để biết thông tin, sự kiện cho bối cảnh bắt đầu là ContextStartedEvent Tài liệu: - http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/event/ContextStartedEvent. html –