我在我的web应用程序中使用Spring启动缓存支持,并将咖啡因设置为缓存提供程序。
我在我的项目中有几个缓存,其中大多数都有公共配置,但是对于两个特定的缓存,我需要设置不同的参数。
在我的application.properties
中,我有类似的内容:
spring.cache.cache-names=a-cache,b-cache,c-cache, ...
spring.cache.caffeine.spec=maximumSize=200,expireAfterWrite=3600s
这是常见的缓存。然后我想使用自定义参数扩展此配置。
这篇文章解释了如何通过配置类配置缓存,但是使用这个方法我完全覆盖了常见的配置。
我需要的是这样的东西:
@Configuration
public class CacheConfiguration {
@Autowired
private CacheManager cacheManager;
@Bean
public CacheManager cacheManager(Ticker ticker) {
CaffeineCache c1 = new CaffeineCache("my-custom-cache", Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.maximumSize(400)
.build());
// ...
cacheManager.setCaches(Arrays.asList(..., c1, ... )); // here I'd like to add custom caches...
return cacheManager;
}
}
但是声明一个新的CacheManager
bean,“原始的”CacheManager
不是自动连接的。。。
有没有办法实现我需要的?
我使用CompositeChemaManager来处理这种情况。基本上,我创建自定义配置的CaffineCache,并将它们放在SimpleCacheManager中,然后使用带有默认设置的CaffineCacheManager。我将两个html" target="_blank">缓存管理器都放入CompositeCacheManager中,spring将首先在我的SimpleCacheManager中查找匹配的缓存,如果没有找到,它将在CaffeineCacheManager中查找。如果CaffineCacheManager也没有匹配项,它将使用默认设置创建一个新缓存。
@Configuration
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
private static final Logger logger = LoggerFactory.getLogger(CacheConfig.class);
@Autowired
private MyCacheProperties myCacheProperties;
@Bean
@Override
public CacheManager cacheManager() {
// create a custom configured cache for each of the customCacheSpecs in the myCacheProperties
final List<CaffeineCache> customCaches = myCacheProperties.getCustomCacheSpecs().entrySet().stream()
.map(entry -> buildCache(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
// put the custom caches in a SimpleCacheManager
final SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
simpleCacheManager.setCaches(customCaches);
// create a Caffeine Cache manager based on the defaultCacheSpec in the myCacheProperties
final CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
caffeineCacheManager.setCacheSpecification(myCacheProperties.getDefaultCacheSpec());
caffeineCacheManager.setAllowNullValues(false);
// create a CompositeCacheManager which will first look for a customized cache from the simpleCacheManager and then
// if no cache is found it will delegate to the caffeineCacheManager. If the caffeineCacheManager already has
// created an appropriate cache it will be used, other wise it will create a new cache with the default
// settings
final CompositeCacheManager compositeCacheManager = new CompositeCacheManager(simpleCacheManager,
caffeineCacheManager);
return compositeCacheManager;
}
private CaffeineCache buildCache(final String name, final String cacheSpec) {
final CaffeineCache caffeineCache = new CaffeineCache(name, Caffeine.from(cacheSpec)
.build());
logger.debug("created custom cache: name='{}', and spec='{}'", name, cacheSpec);
return caffeineCache;
}
}
幸亏https://medium.com/@d、 洛佩兹。j/configuration-multiple-ttl-caches-in-spring-boot-dinamically-75f4aa6809f3的灵感
我使用@enableCaching和@cacheable注释在SpringBoot应用程序中启用了缓存。缓存属性在application.yaml文件中定义。
我在SpringBootApplication中实现了缓存,如下所示 那么,如果我们不定义CacheManager将使用什么呢?
扩展说明 用请求参数作为 key,缓存返回结果。 扩展接口 org.apache.dubbo.cache.CacheFactory 扩展配置 <dubbo:service cache="lru" /> <!-- 方法级缓存 --> <dubbo:service><dubbo:method cache="lru" /></dubbo:service> <!-- 缺省值设置,当<dubbo:serv
问题内容: Hibernate使用的默认缓存的名称是什么?甚至有默认的缓存,还是必须添加缓存提供程序才能利用缓存? 我以为是EHCache,但我认为必须对其进行配置…默认情况下它不是“那里” … 问题答案: Hibernate已经通过持久上下文提供了一种称为 一级缓存 的缓存机制。它在 Session作用域内,默认情况下处于启用状态,无法关闭。 诸如EHCache之类的缓存提供程序提供了另一种称为
你可以通过 nuxt.config.js 文件中的 extend 配置项来扩展 Webpack 的配置: module.exports = { build: { extend (config, { isDev, isClient }) { // ... } } }
我正在使用带有Spring Boot(2.3.3版)的H2数据库和H2数据库的所有默认设置。 这是我申请的所有文件。 pom.xml