2011-09-22 2 views
2

많은 양의 이미지를 Spring 웹 응용 프로그램에로드해야합니다. 성능상의 이유로 이것은 webapp를 시작한 후에 만 ​​이루어져야합니다. 여러 사용자, 세션 등에서 접근하기 위해 이미지를 싱글 톤으로 저장해야합니다.봄용 웹 응용 프로그램을 한 번만로드하는 중

이미 이미지를로드하는 초기화 도구로 Java Bean을 빌드하고 컨트롤러에이 Bean을 주입하고 이미지를 가져와야합니다. 작동하지만, 주입이 옳은 일이 아닙니다.

이미지를 저장하고 웹 애플리케이션 당 한 번만 이미지를로드 할 수있는 싱글 톤 빈을 어떻게 만들 수 있습니까?

답변

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를 추가하는 것이 훨씬 좋습니다.

싱글 톤에서 수동으로 작성된 캐싱 및로드와 비교할 때이 방법이 더 좋지 않습니까?

+0

소리가 크고 ist를 사용하면 필터를 구성하는 데 필요한 유일한 것입니까? 좋은. 'ehcache.xml'을 어디에 둘 것인가? web.xml과 같은 경로입니까? 전에는 ehcache를 사용하지 않았습니다. – Nils

+1

'ehcache.xml'을'CLASSPATH'의 루트 (예 :'/ src/main/resources')에 넣어야합니다. 그들은 매우 광범위한 문서를 가지고 있으며 다른 기능을보기 위해 그것을 확인하십시오. –

+0

당신이 말한대로 모든 것을 설정하고,''-Tags를'ehcache.xml'에 추가하고 docs의 maven-snippet을 통해 ehcache를 포함 시켰습니다. 하지만 Tomcat은 응용 프로그램을 시작할 수 없습니다. 'FAIL - 응용 프로그램을 context path/webapp에서 시작할 수 없습니다.', tomcat cant가 웹 XML을 올바른 방법으로 해결하는 것처럼 보입니다. 아직 세부 정보가없는 로그 항목을 찾을 수 없습니다. 어떤 아이디어, 그 원인? – Nils

관련 문제