春季启动,将咖啡因缓存作为令牌存储,刷新和逐出

问题描述

我目前在Spring Boot应用程序中使用咖啡因作为JWT令牌存储令牌的有效期限设置为30分钟。因此,我想在30分钟前主动获取令牌并重新加载缓存,以便后续请求获得新令牌。

以下是我的缓存配置:

cache:
  cache-names: token-service
    caffeine:
      spec: maximumSize=2,expireAfterWrite=30m

以下是我的spring @Cachable,其他spring服务使用它来获取缓存,然后查询需要令牌的外部API。

@Cacheable(cacheNames = { TOKEN_SERVICE_NAME },key = "#root.target.EXTERNAL_API_TOKEN_SERVICE_KEY")
public Token getToken() throws UnsupportedEncodingException {...}

但是间歇性的API请求正在获得“未授权(401)”,这意味着令牌无效。据我了解,当缓存被逐出并再次重新加载条目时,缓存加载将被阻止。

咖啡因是否在内部阻塞线程,直到加载条目?我读过Spring @Cachable不等待阻塞。我已阅读@Cachable中的 sync = true 选项,并希望将 refreshAfterWrite 选项添加到缓存配置中。

@Cacheable(cacheNames = { TOKEN_SERVICE_NAME },key = "#root.target.EXTERNAL_API_TOKEN_SERVICE_KEY",sync=true)

cache:
  cache-names: token-service
    caffeine:
      spec: maximumSize=2,expireAfterWrite=30m,refreshAfterWrite=29m

还要考虑使用@Bean而不是Cacheable来准备缓存。

高度赞赏任何指向上述用法以及有关上下文中的 sync和refreshAfterWrite 操作的指针。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

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