每个春季webapp只加载一次图像

时间:2011-09-22 07:26:10

标签: java spring singleton javabeans startup

我需要将一堆图像加载到我的Spring webapp中。出于性能原因,这应该只在启动webapp后完成。图像应保存为单个,以便从多个用户,会话等访问

我已经构建了一个带有initalizer的Java Bean来加载图像,在我的控制器中我注入了这个bean并获取了图像。工作,但注射不是正确的。

如何构建单个bean来保存图像,并且每个webapp只加载一次图像?

1 个答案:

答案 0 :(得分:4)

您是否考虑过使用EhCache内置web caching?只需将其添加到web.xml

即可
<filter>
    <filter-name>pageCachingFilter</filter-name>
    <filter-class>net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>pageCachingFilter</filter-name>
    <url-pattern>*.htm</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.gif</url-pattern>
    <url-pattern>*.jpg</url-pattern>
    <url-pattern>*.css</url-pattern>
</filter-mapping>

SimplePageCachingFilter中配置ehcache.xml缓存:

<cache name="SimplePageCachingFilter"
       maxElementsInMemory="1000"
       eternal="false"
       timeToIdleSeconds="31536000"
       timeToLiveSeconds="31536000"
       overflowToDisk="false"
       memoryStoreEvictionPolicy="LRU"
       statistics="true"
        />

EhCache现在将拦截所有客户端对静态资源的请求,读取它们一次,将它们放入缓存并返回给用户。为了使它更好,它甚至会添加HTTP Expiry headeres,以便客户端不会再次为您调用相同的资源。

与单手中的手动编写加载和缓存相比,这种方法不是更好吗?