日期:2014-05-18  浏览次数:20819 次

如何预先将数据加载到内存
应该有不少朋友遇到这样的问题,就是有一些简单的代码-名称数据,例如:
<option   value   =   "12 "> 天津市 </option>  
<option   value   =   "13 "> 河北省 </option>  
<option   value   =   "14 "> 山西省 </option>  
<option   value   =   "15 "> 内蒙古自治区 </option>  
<option   value   =   "21 "> 辽宁省 </option>  
系统一般处理和记录的是代码,也不希望在要用到其对应的名称时到数据库中去查询,希望预先将这些数据加载到内存,用到时直接调用其数据就可以了,如果一个系统中有不少这样的数据,例如地区数据,行业数据,请问大家有什么好的方案来进行预先加载,以及调用?对了,在不使用任何持久框架的情况下。



------解决方案--------------------

给大家介绍个技术群

大家一起学习,一起提高

32517633
------解决方案--------------------
在第一次把这些读到内存里,以后再取得时候,进行判断内存里是否有,如果有,就不用去取了
可以放到application里,这样就都能共享了。
------解决方案--------------------
<servlet>
<servlet-name> MyInitServlet </servlet-name>
<servlet-class> my.MyInitServlet </servlet-class>
<load-on-startup> 2 </load-on-startup>
</servlet>

public class MyInitServlet extends HttpServlet {

private static final long serialVersionUID = 1L;

public void init() throws ServletException {
super.init();
ServletContext ctx = this.getServletContext();
Map map = oneObiect.doSomething()
ctx.setAttribute( "something_map ",map);
}
}

in page:

<% Map map = (Map)application.getAttribute( "something_map "); %>
------解决方案--------------------
有很多方法的,最简单的就是用一个servlet,让它随Web应用启动而启动,在这个servlet中把这些数据放到一个常量类中

我们之前的项目中采用了apache的common-util包来根据配置文件动态生成Vo类实例,然后把这些Vo类实例放到常量类的HashMap中

还有一个项目是用的Lucene的索引机制,这个连数据库都不用了,直接生成索引文件,然后以后的查询都从索引文件中查,比查数据库也高效得多