在 Spring 启动时以编程方式设置 Ehcache 的持久性目录
Set Ehcache's persistence directory programmatically on Spring Boot
我在 Spring 启动时以编程方式设置我的缓存,我需要设置持久目录。
根据 Ehcache's documentation,这必须在 CachingProvider 级别全局完成:
CachingProvider cachingProvider = Caching.getCachingProvider();
EhcacheCachingProvider ehcacheProvider = (EhcacheCachingProvider) cachingProvider;
DefaultConfiguration configuration = new DefaultConfiguration(ehcacheProvider.getDefaultClassLoader(),
new DefaultPersistenceConfiguration(getPersistenceDirectory()));
CacheManager cacheManager = ehcacheProvider.getCacheManager(ehcacheProvider.getDefaultURI(), configuration);
问题是,Spring 提供的配置缓存的机制,JCacheManagerCustomizer,在 CacheManager 级别工作,到那时已经太晚了设置持久目录。
所以,我的问题是,实现此目标的最佳方法是什么?我不想使用 ehcache.xml 来执行此操作,我在我的应用程序中注入了一堆配置并且 it's support of dynamic configuration 对我的需求来说太有限了。
所以目前,在有人指出我正确的方向之前,我正在做的是:
...
import org.springframework.cache.CacheManager;
import org.springframework.cache.jcache.JCacheCacheManager;
...
@Configuration
@EnableCaching
public class CacheConfiguration {
...
@Bean
public CacheManager getCacheManager() {
var cachingProvider = (EhcacheCachingProvider) Caching.getCachingProvider();
DefaultConfiguration configuration = new DefaultConfiguration(cachingProvider.getDefaultClassLoader(),
new DefaultPersistenceConfiguration(directory.toFile()));
var cacheManager = cachingProvider.getCacheManager(cachingProvider.getDefaultURI(), configuration);
cacheManager.createCache(...)
return new JCacheCacheManager(cacheManager);
}
...
}
我觉得这不太对,我似乎通过获取对 CachingProvider 的引用来绕过 Spring。我的意思是,Spring 检测到类路径上的 Ehcache 提供程序,它不应该为我注入 CachingProvider 吗?
我在 Spring 启动时以编程方式设置我的缓存,我需要设置持久目录。
根据 Ehcache's documentation,这必须在 CachingProvider 级别全局完成:
CachingProvider cachingProvider = Caching.getCachingProvider();
EhcacheCachingProvider ehcacheProvider = (EhcacheCachingProvider) cachingProvider;
DefaultConfiguration configuration = new DefaultConfiguration(ehcacheProvider.getDefaultClassLoader(),
new DefaultPersistenceConfiguration(getPersistenceDirectory()));
CacheManager cacheManager = ehcacheProvider.getCacheManager(ehcacheProvider.getDefaultURI(), configuration);
问题是,Spring 提供的配置缓存的机制,JCacheManagerCustomizer,在 CacheManager 级别工作,到那时已经太晚了设置持久目录。
所以,我的问题是,实现此目标的最佳方法是什么?我不想使用 ehcache.xml 来执行此操作,我在我的应用程序中注入了一堆配置并且 it's support of dynamic configuration 对我的需求来说太有限了。
所以目前,在有人指出我正确的方向之前,我正在做的是:
...
import org.springframework.cache.CacheManager;
import org.springframework.cache.jcache.JCacheCacheManager;
...
@Configuration
@EnableCaching
public class CacheConfiguration {
...
@Bean
public CacheManager getCacheManager() {
var cachingProvider = (EhcacheCachingProvider) Caching.getCachingProvider();
DefaultConfiguration configuration = new DefaultConfiguration(cachingProvider.getDefaultClassLoader(),
new DefaultPersistenceConfiguration(directory.toFile()));
var cacheManager = cachingProvider.getCacheManager(cachingProvider.getDefaultURI(), configuration);
cacheManager.createCache(...)
return new JCacheCacheManager(cacheManager);
}
...
}
我觉得这不太对,我似乎通过获取对 CachingProvider 的引用来绕过 Spring。我的意思是,Spring 检测到类路径上的 Ehcache 提供程序,它不应该为我注入 CachingProvider 吗?