没有 SpringBoot 的 Spring 缓存 Caffeine 集成

问题描述

我想在我的 Spring 5 应用程序中集成 caffeine Cache。我知道我需要 caffeineCacheManager,但我没有这个类。我找到的唯一方法是将 SpringBoot Starter Cache 包添加到 pom,但我不想使用 Spring Boot。

我的 pom 中有这个 Spring 包:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

    <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-web -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>5.3.3.RELEASE</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.springframework.security/spring-security-config -->
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>5.3.3.RELEASE</version>
</dependency>

有什么办法可以使用带有 Spring Boot 的 caffeineCacheManager 类?谢谢。

实际上我正在使用此代码来配置缓存:

@Bean
public CacheManager cacheManager() {
    
    SimpleCacheManager cacheManager = new SimpleCacheManager();
    cacheManager.setCaches(Arrays.asList(
        new ConcurrentMapCache(
                "categorias",caffeine.newBuilder().expireAfterWrite(Duration.ofDays(1)).maximumSize(100).build().asMap(),false
        ),new ConcurrentMapCache(
                "ciudad",caffeine.newBuilder().maximumSize(100).build().asMap(),false
        )
    ));
    
    return cacheManager;
}

解决方法

主要的 spring 缓存实现位于 spring-context 依赖项中。您应该只设置该缓存管理器并使用 @Cacheable 注释。 示例参见:https://www.baeldung.com/spring-cache-tutorial 如果您需要使用 Spring 缓存机制连接 Caffeine 缓存的代码示例,请告诉我。

CaffeineCacheManager 配置:

CaffeineCacheManager 位于

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>5.2.8.RELEASE</version>
</dependency>

和咖啡因依赖:

<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>2.8.8</version>
</dependency>

配置:

@Configuration
@EnableCaching
public class Config {
    @Bean
    public Caffeine<Object,Object> caffeineConfig() {
        return Caffeine.newBuilder().expireAfterWrite(60,TimeUnit.MINUTES);
    }
    @Bean
    public CacheManager cacheManager(Caffeine<Object,Object> caffeine) {
        CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager();
        caffeineCacheManager.setCaffeine(caffeine);
        return caffeineCacheManager;
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...