为@Cacheable设置TTL – Spring

今天,我被要求为应用程序正在使用的某些键设置缓存的过期时间,因此我Swift开始寻找Spring @Cacheable表示法提供的所有选项,以设置过期时间或生存时间。 由于Spring没有提供任何可配置的选项来实现它,因此,我利用固定延迟的@Scheduled注释构建了一个实现,如下所示:

@CacheEvict(allEntries = true, cacheNames = { "EMPLOYEE_", "MANAGER_" })
@Scheduled(fixedDelay = 30000)
public void cacheEvict() {
}

现在的问题是我希望从环境值而不是硬编码值填充缓存名称以及固定的延迟时间。 为了实现相同的目的,我在类级别声明了变量(从属性文件填充),并在注释中填充了键的值,这使IDE抱怨值必须是常量,如下所示:

“注释属性CacheEvict.cacheNames的值必须是一个常量表达式”

然后,我开始寻找其他选项来从环境中获取键的值,并遇到了@Scheduled表示法的fixedDelayString元素,它帮助我实现了目标,如下所示:

@Scheduled(fixedDelayString = "${couchbase.cache.flush.fixed.delay}")
public void cacheEvict() {
}

在寻找@CacheEvict注释的类似元素时,不幸的是,在阅读关于SPR-10778的bug的注释后给了我一个提示,该元素不可用,提示说:

“缓存抽象现在支持CacheResolver抽象,并且可以按类和/或在特定操作上全局指定。 CacheResolver使您能够计算要在代码中使用的缓存,从而拥有所需的所有灵活性。”

正如错误所言,要利用CacheResolver动态填充缓存名称,我使用了AbstractCacheResolver的实现从环境中获取缓存的名称,如下所示:

@Value("#{'${couchbase.cache.flush}'}")
private String couchbaseCacheFlush;@Bean(name = "customCacheResolver")public CacheResolver cacheResolver() {CacheResolver cacheResolver = new AbstractCacheResolver(cacheManager()) {@Overrideprotected Collection<String> getCacheNames(CacheOperationInvocationContext<?> context) {return Arrays.asList(couchbaseCacheFlush.split(","));}};return cacheResolver;}

修改cacheEvict()以使用自定义缓存解析器而不是缓存名称完成了当天的任务,如下所示:

@CacheEvict(allEntries = true, cacheResolver = "customCacheResolver")
@Scheduled(fixedDelayString = "${couchbase.cache.flush.fixed.delay}")
public void cacheEvict() {
}

完整的源代码可以在github上找到 。

翻译自: https://www.javacodegeeks.com/2017/01/setting-ttl-cacheable-spring.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350604.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tf.equal

tf.equal(A, B)是对比这两个矩阵或者向量的相等的元素&#xff0c;如果是相等的那就返回True&#xff0c;反正返回False&#xff0c;返回的值的矩阵维度和A是一样的 import tensorflow as tf import numpy as np A [[1,3,4,5,6]] B [[1,3,4,3,2]] with tf.Session() a…

校验输入框的内容不能重复_答应我,用了这个jupyter插件,别再重复造轮子了

以下文章来源于Python大数据分析 &#xff0c;作者费弗里1 简介在使用Python、R等完成日常任务的过程中&#xff0c;可能会经常书写同样或模式相近的同一段代码&#xff0c;譬如每次使用matplotlib绘制图像的时候可以在开头添加下面两行代码来解决中文乱码等显示问题&#xff1…

P2387 [NOI2014]魔法森林

和最小差值生成树差不多 都是用lct维护生成树的题目 本题可以以a排序&#xff0c;再维护b&#xff08;通常这种二维变量的题都差不多这样&#xff0c;先排序一维&#xff09; 然后我tm竟然rotate手误打错了一点...调了好久.. 然后关于pushup&#xff1a;关于最大值&#xff0c;…

C# float/double 减 float/double 等 (X.xxxxxxxxxxxxxE-07)(黑盒测试)

问题 因为没有深究原理&#xff0c;所有只进行了“黑盒测试” 黑盒测试结论&#xff1a; 问题操作结论float/double运算进过一系列的运算后大概率 &#xff01; 0.0 &#xff0c; 而是等于0.00000000000xxxx等于X.xxxxxxxx一串数字的时候不影响下一步继续使用当需要显示fl…

ABP的新旧版本

新版本 https://abp.io/documents/abp/latest/Index https://github.com/abpframework/abp ABP is an open source application framework focused on ASP.NET Core based web application development, but also supports developing other types of applications. 旧版本…

tensorflow的优化器Optimizer

种类如下&#xff0c;其中Optimizer是基类tf.train.Optimizertf.train.GradientDescentOptimizertf.train.AdadeltaOptimizertf.train.AdagradOptimizertf.train.AdagradDAOptimizertf.train.MomentumOptimizertf.train.AdamOptimizertf.train.FtrlOptimizertf.train.ProximalG…

python3支持中文_彻底颓了—— Vim Python 3 接口不支持中文 - Jacky Liu's Blog

折腾了好久才编译出来一个支持 Python 3 的 Vim&#xff0c;谁知居然有这么多问题。 除了 vim.current.buffer 对象不再支持 slice 类型参数以外&#xff0c;今天又发现这个&#xff1a; :py3 vim.current.buffer.append(XXX 模块的控制面板) 结果在 Vim 里加进去的一行看起来是…

如何处理班级过多的问题

在几乎所有我解释了 面向对象程序设计 观点的演讲中&#xff0c;都有人分享这样的评论&#xff1a;“如果我们遵循您的建议&#xff0c;我们将有很多小类。” 我的回答总是一样&#xff1a;“我们当然会的&#xff0c;那太好了&#xff01;” 老实说&#xff0c;即使您不能考虑…

java护照号码校验_学无止境之小白学java……第001天

学习主题&#xff1a;预科阶段对应视频&#xff1a;http://www.itbaizhan.cn/course/id/18.html 对应作业&#xff1a;1. 为什么需要学编程&#xff0c;什么样的人可以做程序员&#xff1f;编程是现实逻辑的表达&#xff0c;编程对数学和英语要求并不高。2. 本行不行&#xff0…

mfc通过信号量保证线程同步

1、声明一个全局handle,记住在cpp里也声明 extern HANDLE uiHandle; 2、创建信号量 uiHandle CreateSemaphore(NULL,1,1,NULL); 3、使用 线程1&#xff1a;WaitForSingleObject(uiHandle,INFINITE); a;//在这里访问同一对象 ReleaseSemaphore(uiHandle,1,NULL); 线程2&#xf…

python字典和集合双向索引_Python字典和集合

字典和集合基础字典是一系列无序元素的组合&#xff0c;其长度大小可变&#xff0c;元素可以任意的删减和改变。不过&#xff0c;这里的元素是一堆键&#xff08;key&#xff09;和值&#xff08;value&#xff09;的配对。 集合没有键和值的配对&#xff0c;是一系列无序的、唯…

ITK读取图像

//读取png图像#include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" #include "itkPNGImageIOFactory.h" #include "itkJPEGImageIOFactory.h"int main(int argc, char ** argv) {typed…

documentFragment深入理解

documentFragment是一个保存多个element的容器对象&#xff08;保存在内存&#xff09;当更新其中的一个或者多个element时&#xff0c;页面不会更新。只有当documentFragment容器中保存的所有element更新后再将其插入到页面中才能更新页面。 documentFragment用来批量更新 列如…

在React中处理事件

在使用React渲染RESTful服务后&#xff0c;我们创建了一个简单的UI&#xff0c;用于渲染从RESTful服务获取的员工列表。 作为本文的一部分&#xff0c;我们将扩展同一应用程序以支持添加和删除员工操作。 我们将通过添加/删除员工操作来更新react-app后端api&#xff0c;并修改…

ITK读图VTK显示

ITK 实现图像数据的读取&#xff0c;然后通过连接器把ITK读取的图像数据传输到VTK 然后进行显示。 #include "itkImage.h" #include "itkImageFileReader.h" #include "itkImageToVTKImageFilter.h" #include "itkJPEGImageIOFactory.h&qu…

python如何读二进制文件_python怎么读二进制文件

实际项目中经常遇到读取二进制问题&#xff0c;Python下读取二进制文件一般用Python的文件打开读写相关函数和struct. python学习网&#xff0c;大量的免费python视频教程&#xff0c;欢迎在线学习&#xff01; 1。获取文件名filename&#xff0c;可用对话框,也可以直接手写 2。…

第一阶段冲刺07

第一阶段冲刺07 昨天做了什么&#xff1a;学习了sqlite&#xff0c;但了解到开发非单机App&#xff0c;sqlite不适用于作为后台数据库。 今天准备做什么&#xff1a;学习http协议与Android通过服务器连接MySQL的知识。 遇到的困难&#xff1a;对于开发非单机版App的数据库的选择…

horizon client 无法识别域_「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法...

事件风暴是一种快速&#xff0c;轻量级且未得到充分认可的群体建模技术&#xff0c;它对于加速开发团队而言非常强大&#xff0c;有趣且有用。作为Alberto Brandolini的心血结晶&#xff0c;它是Gamestorming和领域驱动设计&#xff08;DDD&#xff09;原则的综合学习实践。该技…

第十篇 数据类型总结

第十篇 数据类型总结 ## 1 按可变类型or不可变类型 可变数据类型不可变数据类型列表数字字典字符串集合元组## 2 按有序or无序 有序无序字符串字典列表集合元组/数字不存在有序或无序一说## 3 按访问类型&#xff08;查&#xff09; 直接访问顺序访问&#xff08;序列类型&…