咖啡因缓存在 Spring Boot 中不起作用

问题描述 投票:0回答:1

我有一个 Spring Boot 应用程序,其中有以下 Caffeine 实现来帮助我缓存一些令牌:

CacheConfig.java

@Configuration
@EnableCaching
@Profile("!test")
public class CacheConfig {
  private static final Logger logger = LoggerFactory.getLogger(CacheConfig.class);

  @Bean
  public Caffeine<Object, Object> caffeineConfig() {
    return Caffeine.newBuilder()
        .maximumSize(15)
        .expireAfterWrite(60, TimeUnit.SECONDS)
        .initialCapacity(10);
  }

  @Bean
  public CacheManager cacheManager(Caffeine caffeine) {
    logger.info("Initializing Caffeine Cache");
    CaffeineCacheManager caffeineCacheManager = new CaffeineCacheManager("TokenCache");
    caffeineCacheManager.setCaffeine(caffeine);
    return caffeineCacheManager;
  }

MainApplication.java:

@SpringBootApplication
@EnableCaching
public class InstanceServiceApplication {

  public static void main(String[] args) {
    SpringApplication.run(InstanceServiceApplication.class, args).start();
  }
}

我正在使用 @Cacheable 注释来尝试缓存令牌:

@Service
public class CloningInstanceService {
  @Cacheable(value = "TokenCache", key="{#user}") // Specify the cache and key name
  public String getSwiftStackTokenCache(String user) {
    String swiftStackPwd = vaultUtil.getSecret(ApplicationContext.SWIFT_STACK_PWD);
    String url = SWIFT_STACK_URI + "auth/v1.0";
    HttpResponse<String> response =
        Unirest.get(url).header("x-auth-user", user).header("x-auth-key", swiftStackPwd).asString();
    Headers responseHeaders = response.getHeaders();
    String authToken = responseHeaders.getFirst("X-Auth-Token");
    logger.info("authTokenCache: {}", authToken);
    return authToken;
  }
}

我尝试将以下内容添加到 application.yaml 文件中:

spring:
  cache:
    type: caffeine

我还尝试在@Cacheable注释中使用key =“user”,但这没有帮助。 我在调用令牌后记录缓存,但里面什么也没有。我可以判断缓存不起作用的另一种方法是,我在后续调用中获得一个新令牌,而我应该获得相同的令牌。

    CaffeineCache caffeineCache = (CaffeineCache) cacheManager.getCache("TokenCache");
    Cache<Object, Object> nativeCache = caffeineCache.getNativeCache();
    for (Map.Entry<Object, Object> entry : nativeCache.asMap().entrySet()) {
      logger.info("key: " + entry.getKey());
      logger.info("value: " + entry.getValue());
    }

我可能做错了什么?我参考了多个网站来实现这一点,我正在做与网站中相同的事情。

java spring-boot caching guava caffeine-cache
1个回答
0
投票

问题是我从定义它的同一个类中调用 @Cacheable 函数。将缓存功能移至单独的文件中,使其正常工作:

@Service
public class CacheService {
  @Cacheable(value = "TokenCache") // Specify the cache name
  public String getSwiftStackTokenCache(String user) {
    String swiftStackPwd = vaultUtil.getSecret(ApplicationContext.SWIFT_STACK_PWD);
    String url = SWIFT_STACK_URI + "auth/v1.0";
    HttpResponse<String> response =
        Unirest.get(url).header("x-auth-user", user).header("x-auth-key", swiftStackPwd).asString();
    Headers responseHeaders = response.getHeaders();
    String authToken = responseHeaders.getFirst("X-Auth-Token");
    logger.info("authTokenCache: {}", authToken);
    return authToken;
  }

}

然后从我的其他服务中调用上述函数:

 String ssaToken = cacheService.getSsaToken(ssaWorkflowClientId);

© www.soinside.com 2019 - 2024. All rights reserved.