如何从配置文件为Spring @Cacheable注解设置缓存名称
Spring @Cacheable从配置文件取缓存名称的正确打开方式
你试的这两种写法确实容易踩坑,我帮你梳理下靠谱的解决方案,以及为啥之前的写法可能没生效:
一、直接用占位符的正确姿势
其实Spring 3.1及以上版本是支持直接在@Cacheable的value属性里用${}占位符的,也就是你写的@Cacheable("${some.cache.name}")。如果这个写法没生效,大概率是这几个原因:
- 配置文件里的key写错了,比如
some.cache.name是不是真的存在于你的application.properties/yaml中 - 你的Spring版本太低了,低于3.1的话压根不支持注解属性里的占位符解析
- 要是用了多环境配置,得确认当前激活的环境里有没有这个配置项
二、更稳定的SpEL表达式方案
如果直接用${}不好使,或者你想给缓存名称加个默认值(防止配置缺失报错),可以借助Spring的Environment对象来获取配置,写法如下:
@Cacheable(value = "#{environment.getProperty('some.cache.name', 'default-cache')}")
这里第二个参数是默认值,要是配置文件里找不到some.cache.name,就自动用default-cache当缓存名称,实用性拉满。
三、为啥你之前的第二种写法可能没生效
你写的@Cacheable("#{'${some.cache.name}'}")是把占位符解析后的字符串再套了一层SpEL,理论上是能跑的,但如果没生效,大概率是占位符解析的时机不对,或者配置加载顺序出了问题,这种写法不如直接用Environment的方式清晰可靠。
最后再提个小提醒:要确保你的配置文件已经被Spring正确加载,比如application.properties要放在src/main/resources下,或者通过@PropertySource注解指定了配置文件的路径哦。
内容的提问来源于stack exchange,提问作者Rostislav V
相关产品推荐
相关产品推荐

