在 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 吗?