2012-01-11 2 views
0

스프링 jdbc 템플릿을 사용하는 webapps가 있었는데 지금 내 응용 프로그램의 성능을 향상시키고 싶습니다. 그래서 Tomcat 서버에 일부 데이터베이스 쿼리의 결과를 캐시하고 싶습니다. 어떻게 개념을 달성 할 수 있습니까?응용 프로그램 서버의 캐시 데이터베이스 쿼리

감사합니다.

답변

0

스프링 3.1은 Caching Abstraction을 도입했습니다. 이 메소드를 사용하여 DAO 메소드 호출의 결과를 캐시 할 수 있어야합니다.

설명서는 here이며 스프링 블로그 here에 포함되었습니다.

+0

답장을 보내 주셔서 감사합니다. 구현할 수있는 예제 또는 링크를 제공해주십시오. – Anurag

+0

꽤 새로운 기능이기 때문에 거기에 몇 가지 예제가 있지만 거대한 숫자는 없습니다. 이미 설명서를 읽었습니까? 그것을 읽은 후 무엇을 시도 했습니까? 코드가 붙어 있으면 오류를 게시하십시오. –

+0

http://www.brucephillips.name/blog/index.cfm/2011/3/22/Spring-31-Cache-Implementation-With-Cacheable-and-CacheEvict-Annotations –

0

나는 제대로 작동하지만, Alex가 올바른지, 당신이 캐싱 백엔드로 원하는 것에 따라 이것을 구성하는 몇 가지 다른 방법이 있습니다.

캐시 구성의 경우 구성하기가 쉽기 때문에 ehcache를 선택했지만 ttl/etc를 구성하기위한 강력한 기능이 있습니다.

구성 :

<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns="http://www.springframework.org/schema/beans" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:cache="http://www.springframework.org/schema/cache" 
     xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
     http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd"> 

    <cache:annotation-driven /> 
    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"> 
     <property name="cacheManager"><ref local="ehcache"/></property> 
    </bean> 
    <bean id="ehcache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" 
      p:configLocation="classpath:ehcache.xml"/> 

</beans> 

ehcache.xml :

<?xml version="1.0" encoding="UTF-8"?> 
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" 
    updateCheck="false" monitoring="autodetect" 
    dynamicConfig="true"> 

<!-- http://ehcache.org/documentation/configuration.html --> 
<!-- Also See org.springframework.cache.ehcache.EhCacheFactoryBean --> 

    <diskStore path="java.io.tmpdir"/> 
    <cache name="resourceBundle" 
      overflowToDisk="false" 
      eternal="false" 
      maxElementsInMemory="500" 
      timeToIdleSeconds="86400" 
      timeToLiveSeconds="86400"/> 

</ehcache> 

나는 때문에 동시에 실행 중복 된 이름을 가진 캐시에, 내 JUnit을 환경에서으로 Ehcache 2.5을 실행하는 문제가 있었다이 허용되지되었고, 그들은 지금 당장 문을 닫지 않는 것 같지만, 여기에 내 진입 입구가 있습니다 :

<dependency> 
     <groupId>net.sf.ehcache</groupId> 
     <artifactId>ehcache-core</artifactId> 
     <version>2.4.7</version> 
    </dependency> 

마지막으로 저장소에서 다음을 수행하십시오.

@Repository 
public class someStore { 
    @PersistenceContext 
    EntityManager em; 

    //The value here needs to match the name of the cache configured in your ehcache xml. You can also use Spel expressions in your key 
    @Cachable(value = "resourceBundle", key = "#basename+':'+#locale.toString()") 
    public ResourceBundle getResourceBundle(final String basename, final Locale locale){ 
     ... 
    } 

    @CacheEvict(value = "resourceBundle", key = "#basename+':'+#locale.toString()") 
    public void revertResourceBundle(final String basename, final Locale locale){ 
     ... 
    } 
}