que tenía una sola aplicación página en introducir la URL que estaba creando un HashMap (utilizado por mi página web) que contenía datos de múltiples bases de datos. Yo siguientes cosas para cargar todo durante el inicio del servidor tiempo-
1- Creado 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- Añadido por debajo de la entrada en web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.context.listener.MyAppContextListener</listener-class>
</listener>
3- En mi clase controlador código actualizado para la primera comprobación de Mapa en 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";
}
Con este cambio cuando inicio mi tomcat, carga dataMap durante startTime y pone todo en servletContext que luego usa Controller Class para obtener resultados del servletContext ya poblado.
bien, gracias.es bueno saber que spring3 filtra los eventos. Me di cuenta de la clase applicationlistener antes. pero sus ganchos también se llamarían para RequestHandledEvent. –
¿Alguna idea de qué pasará si usa las anotaciones y declara dos clases? No anotación (XML) y dos? ¿Dispararán en el orden declarado? gracias;) – momomo
Solo como información, evento para el contexto iniciado es ContextStartedEvent Documentos: - http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/event/ContextStartedEvent. html –