每个 Spring Web 应用程序仅加载一次图像

发布于 2024-12-05 21:42:01 字数 241 浏览 0 评论 0原文

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

我已经构建了一个带有加载图像的初始化程序的 Java Bean,在我的控制器中,我注入这个 Bean 并获取图像。可行,但注入并不适合这种情况。

如何构建一个单例 bean 来保存图像并且每个 Web 应用程序仅加载图像一次?

I need to load a bunch of images into my Spring webapp. For performance reasons this should only be done after starting the webapp. The images should be saved in a singleton to access from multiple users, sessions etc

I already build a Java Bean with an initalizer that loads the images, in my controller I inject this bean and get the images. Works, but injecting isn't the right thing for this.

How can I build a singleton bean to hold the images and only load the images one time per webapp?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冰雪梦之恋 2024-12-12 21:42:01

您是否考虑过使用EhCache内置网络缓存?只需将其添加到您的 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>

并在您的 ehcache.xml 中配置 SimplePageCachingFilter 缓存:

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

EhCache 现在将拦截所有客户端请求静态资源,读取一次,放入缓存并返回给用户。为了让它变得更好,它甚至会添加 HTTP Expiry 标头,这样客户端就不会再次为同一资源调用您。

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

Have you considered using EhCache built-in web caching? Just add it to your 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>

And configure SimplePageCachingFilter cache in your ehcache.xml:

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

EhCache will now intercept all client-side requests for static resources, read them once, put them in cache and return to the user. To make it even better, it will even add HTTP Expiry headeres so the client won't call you again for the same resource.

Isn't this approach better compared to manually-written loading and caching in a singleton?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文