2014-04-12 41 views
0

我们使用Spring MVC注释。 我也有一个StartUpServlet。我的要求是在FilterDispatcher servlet初始化后加载这个servlet。在弹簧上下文初始化后加载webservlet

基本上,我们想要初始化Google Guava缓存并使用表中的数据加载缓存。

我可以有一个静态块并加载数据。但问题是我们做缓存初始化的类和缓存加载可能是垃圾收集,如果我们从来没有长时间访问它。 所以,尽管在servlet中引用了缓存加载类实例,所以它永远不会被垃圾收集。但是Servlet在FrameworkServlet分派器初始化并且依赖注入正在工作之前就被加载了。

寻找在此帮助......

由于事先 Baskar.S

回答

0

缓存实际上并不需要在一个servlet,最简单的是把它在服务器启动时填充缓存的单身bean内部。这个bean应该是这样的:

@Component("cacheBean") 
public class MyCachedDataService implements InitializingBean { 

    private MyCache cache; 

    public void afterPropertiesSet() { 
     ... populate the cache ... 
    } 

    public void cacheLookup(String key) { 
     ... lookup the cache ... 
    } 
} 

最重要的这里将避免对服务器启动后,缓存进一步改变,以避免竞争条件。然后像往常一样使用@Autowired将豆类注入其他豆类。