Загрузка изображений только один раз за весеннее веб-приложение - PullRequest
2 голосов
/ 22 сентября 2011

Мне нужно загрузить кучу изображений в мое весеннее веб-приложение. По соображениям производительности это следует делать только после запуска веб-приложения. Изображения должны быть сохранены в виде одного файла для доступа нескольких пользователей, сеансов и т. Д.

Я уже собираю Java Bean с инициализатором, который загружает изображения, в моем контроллере я внедряю этот bean и получаю изображения. Работает, но инъекция не подходит для этого.

Как мне создать синглтон-бин для хранения изображений и загружать изображения только один раз за веб-приложение?

1 Ответ

4 голосов
/ 22 сентября 2011

Рассматривали ли вы использование 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>

И настройте SimplePageCachingFilter кеш в вашем ehcache.xml:

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

EhCache теперь будет перехватывать все клиентские запросы статических ресурсов, читать их один раз, помещать в кеш и возвращать пользователю. Чтобы сделать его еще лучше, он даже добавит заголовки HTTP Expiry, чтобы клиент больше не звонил вам за тем же ресурсом.

Разве этот подход не лучше по сравнению с ручной записью загрузки и кэширования в синглтоне?

...