Spring相当于在容器启动后加载主数据的servlet
我的webapp中有一个servlet(基于MVC模型2),它在tomcat容器加载应用程序上下文后加载所有主数据。我想用基于Spring的解决方案来取代它。请注意,它需要访问数据源。我该怎么做 web.xmlSpring相当于在容器启动后加载主数据的servlet,spring,spring-mvc,servlets,Spring,Spring Mvc,Servlets,我的webapp中有一个servlet(基于MVC模型2),它在tomcat容器加载应用程序上下文后加载所有主数据。我想用基于Spring的解决方案来取代它。请注意,它需要访问数据源。我该怎么做 web.xml 加载应用程序的所有主数据以缩短响应时间 主数据加载器 com.mywebapp.web.controllers.MasterDataLoader 10 MasterDataLoader.java 公共类MasterDataLoader扩展了HttpServlet{ 私有静态最终记录器
加载应用程序的所有主数据以缩短响应时间
主数据加载器
com.mywebapp.web.controllers.MasterDataLoader
10
MasterDataLoader.java
公共类MasterDataLoader扩展了HttpServlet{
私有静态最终记录器LOG=Logger.getLogger(MasterDataLoader.class);
私有静态最终字符串DATASOURCE=“DATASOURCE”;
@凌驾
public void init(ServletConfig config)抛出ServletException{
super.init(config);
loadAll();
}
私有void loadAll(){
日志调试(“获取应用程序的所有主数据(菜单类别、状态、货运公司、投标类型、产品交叉销售、畅销书等)……”;
ServletContext appContext=getServletContext();
setAttribute(“states”,getAllStates());
}
私有列表getAllState(){
debug(“从数据库获取所有状态…”);
列表状态ST=null;
试一试{
DataSource DataSource=(DataSource)getServletContext().getAttribute(DataSource);
statesLst=newmasterdao(数据源).getAllStates();
}catch(SQLException-ex){
LOG.error(“获取所有状态时出现异常…”);
日志错误(ex);
}
返回状态列表;
}
}
用@PostConstruct
注释一个bean的方法,并用这个方法完成工作。中提供的示例正是您想要做的。为什么不为此编写一个servletcontextlistener?为什么您要“获取主数据”,而不仅仅是使用普通DAO,可能是缓存?我以前从未使用过缓存,在Spring方面也没有太多经验,因此我希望加载所有主数据,例如所有美国州,并将其存储在applicationContext中。我当然可以在ServletContextListener的帮助下做到这一点,但仍然不清楚如何在该侦听器中获取数据源对象。
<servlet>
<description>Loads all master data for the application to reduce response time</description>
<servlet-name>MasterDataLoader</servlet-name>
<servlet-class>com.mywebapp.web.controllers.MasterDataLoader</servlet-class>
<load-on-startup>10</load-on-startup>
</servlet>
public class MasterDataLoader extends HttpServlet {
private static final Logger LOG = Logger.getLogger(MasterDataLoader.class);
private static final String DATASOURCE = "dataSource";
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
loadAll();
}
private void loadAll() {
LOG.debug("Fetching all master data (menu categories, states, freight companies, tender types, product cross sells, best sellers etc.) for the application.........");
ServletContext appContext = getServletContext();
appContext.setAttribute("states", getAllStates());
}
private List<State> getAllStates() {
LOG.debug("Fetching all states from db...");
List<State> statesLst = null;
try {
DataSource dataSource = (DataSource) getServletContext().getAttribute(DATASOURCE);
statesLst = new MasterDao(dataSource).getAllStates();
} catch (SQLException ex) {
LOG.error("Exception while fetching all states...");
LOG.error(ex);
}
return statesLst;
}
}