ho avuto una singola applicazione pagina su registrando l'URL è stato la creazione di un HashMap (usato dalla mia pagina web) che conteneva dati da più database. ho fatto le seguenti cose per caricare tutto durante server di avviare tempo-
1- Creato 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- aggiunta sotto voce nel web.xml
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>com.context.listener.MyAppContextListener</listener-class>
</listener>
3- Nella mia classe Controller codice aggiornato per il primo controllo di Map in 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 questa grande modifica quando avvio il mio tomcat carica dataMap durante startTime e inserisce tutto in servletContext che viene quindi utilizzato da Controller Class per ottenere risultati da servletContext già compilato.
fonte
2016-04-20 11:03:05
ok, grazie.è bello sapere che spring3 filtra gli eventi. Ho notato la classe applicationlistener prima. ma i suoi hook verrebbero anche chiamati RequestHandledEvent. –
Qualche idea su cosa succederà se usi le annotazioni e dichiari due classi? Non-annotazione (XML) e due? Spareranno nell'ordine dichiarato? grazie;) – momomo
Solo per informazioni, l'evento per il contesto avviato è ContextStartedEvent Documenti: - http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/event/ContextStartedEvent. httml –