问题描述
我目前在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 (将#修改为@)