[SPRING] XML없이 Spring 4에서 EhCache 사용하기
SPRINGXML없이 Spring 4에서 EhCache 사용하기
Spring 4 또는 Spring Boot에서 xml없이 EhCache를 초기화하는 방법이 있습니까?
나는 Spring Boot 1.0.0.RC3에 ehcache 의존성이 없지만 Spring 4.0GA 릴리스 포스트는 EhCache에 대한 지원이 향상되었다고 언급했다. 또한 Spring 3에는 org.springframework.cache.ehcache.EhCacheCacheManager 클래스가 있지만 더 이상 종속성의 일부가 아닙니다.
편집하다: Spring 4는 EhCache를 지원합니다. 종속성을 추가해야합니다.
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
편집 2 : 나는 다음과 같은 시도를했고 가까이 있다고 생각하지만 오류가 발생했습니다 :
@Bean
@Override
public CacheManager cacheManager() {
CacheConfiguration cacheConfiguration = new CacheConfiguration();
cacheConfiguration.setName("primary");
cacheConfiguration.setMemoryStoreEvictionPolicy("LRU");
cacheConfiguration.setMaxEntriesLocalHeap(0);
net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration();
config.addCache(cacheConfiguration);
net.sf.ehcache.CacheManager cacheManager = new net.sf.ehcache.CacheManager(config);
cacheManager.setName("EhCache");
return new EhCacheCacheManager(cacheManager);
}
@Bean
public EhCacheManagerFactoryBean factoryBean() {
return new EhCacheManagerFactoryBean();
}
오류
Caused by: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
The source of the existing CacheManager is: [Programmatically configured]
at net.sf.ehcache.CacheManager.assertNoCacheManagerExistsWithSameName(CacheManager.java:590)
at net.sf.ehcache.CacheManager.init(CacheManager.java:384)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:263)
at org.springframework.cache.ehcache.EhCacheManagerFactoryBean.afterPropertiesSet(EhCacheManagerFactoryBean.java:166)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
... 15 more
해결법
-
==============================
1.Spring에서 XML없는 EhCache 설정
Spring에서 XML없는 EhCache 설정
@Configuration @EnableCaching public class CachingConfig implements CachingConfigurer { @Bean(destroyMethod="shutdown") public net.sf.ehcache.CacheManager ehCacheManager() { CacheConfiguration cacheConfiguration = new CacheConfiguration(); cacheConfiguration.setName("myCacheName"); cacheConfiguration.setMemoryStoreEvictionPolicy("LRU"); cacheConfiguration.setMaxEntriesLocalHeap(1000); net.sf.ehcache.config.Configuration config = new net.sf.ehcache.config.Configuration(); config.addCache(cacheConfiguration); return net.sf.ehcache.CacheManager.newInstance(config); } @Bean @Override public CacheManager cacheManager() { return new EhCacheCacheManager(ehCacheManager()); } @Bean @Override public KeyGenerator keyGenerator() { return new SimpleKeyGenerator(); } @Bean @Override public CacheResolver cacheResolver() { return new SimpleCacheResolver(); } @Bean @Override public CacheErrorHandler errorHandler() { return new SimpleCacheErrorHandler(); } }
또는 테스팅을 위해 아래와 같이 XML없이 실행되는 간단한 ConcurrentMapCache를 사용할 수 있습니다.
@Configuration @EnableCaching public class CachingConfig implements CachingConfigurer { @Bean @Override public CacheManager cacheManager() { SimpleCacheManager cacheManager = new SimpleCacheManager(); List<Cache> caches = new ArrayList<Cache>(); caches.add(new ConcurrentMapCache("myCacheName")); cacheManager.setCaches(caches); return cacheManager; } @Bean @Override public KeyGenerator keyGenerator() { return new SimpleKeyGenerator(); } @Bean @Override public CacheResolver cacheResolver() { return new SimpleCacheResolver(); } @Bean @Override public CacheErrorHandler errorHandler() { return new SimpleCacheErrorHandler(); } }
편집 : 기본 캐시에 종료 방법을 추가하도록 업데이트되었습니다. 편집 : 오류 처리기 및 캐시 해결 프로그램에 대한 추가 된 구성
-
==============================
2.필자는 두 가지 추상화 수준, 기술 별 구성 파일 (Ehcache, Redis 등) 및 일반 구성 파일에서이 작업을 수행합니다.
필자는 두 가지 추상화 수준, 기술 별 구성 파일 (Ehcache, Redis 등) 및 일반 구성 파일에서이 작업을 수행합니다.
Ehcache (Redis는 비슷할 것입니다)를위한 것입니다 :
@Configuration public class EhCacheConfiguration { @Bean public EhCacheCacheManager ehCacheCacheManager() { return new EhCacheCacheManager(ehCacheManagerFactoryBean().getObject()); } @Bean public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() { EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean(); cacheManagerFactoryBean.setConfigLocation(new ClassPathResource("ehcache.xml")); cacheManagerFactoryBean.setShared(true); return cacheManagerFactoryBean; } }
그리고 여기에 일반적인 하나가 있습니다 (Redis 후크로 완성 됨) :
@Configuration @EnableCaching public class CachingConfiguration implements CachingConfigurer { @Qualifier("ehCacheCacheManager") @Autowired(required = false) private CacheManager ehCacheCacheManager; @Qualifier("redisCacheManager") @Autowired(required = false) private CacheManager redisCacheManager; @Bean @Override public CacheManager cacheManager() { List<CacheManager> cacheManagers = Lists.newArrayList(); if (this.ehCacheCacheManager != null) { cacheManagers.add(this.ehCacheCacheManager); } if (this.redisCacheManager != null) { cacheManagers.add(this.redisCacheManager); } CompositeCacheManager cacheManager = new CompositeCacheManager(); cacheManager.setCacheManagers(cacheManagers); cacheManager.setFallbackToNoOpCache(false); return cacheManager; } @Bean @Override public KeyGenerator keyGenerator() { return new DefaultKeyGenerator(); } }
from https://stackoverflow.com/questions/21944202/using-ehcache-in-spring-4-without-xml by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JPA EntityManager 세션 무효화 (0) | 2018.12.19 |
---|---|
[SPRING] Spring MVC에서 PUT과 DELETE 메소드 사용하기 (0) | 2018.12.19 |
[SPRING] @Scheduled 주석을 사용하여 시작된 예약 된 작업을 중지하는 방법은 무엇입니까? (0) | 2018.12.19 |
[SPRING] 최대 절전 모드, 봄, JPA 및 격리 - 사용자 정의 격리는 지원되지 않습니다. (0) | 2018.12.19 |
[SPRING] Spring / Rest @PathVariable 문자 인코딩 (0) | 2018.12.19 |