当前位置: 首页 > 知识库问答 >
问题:

@使用应用程序属性的可缓存条件

申屠亦
2023-03-14

我试图将Redis与Spring的@cacheable一起使用,但需要根据Spring Boot风格的应用程序属性有条件地打开或关闭缓存。我的第一次尝试似乎不起作用。

application.properties文件:

auth.token-cache-enabled=false

properties类:

@Component
@ConfigurationProperties(prefix = "auth")
public class AuthProperties {
    public boolean tokenCacheEnabled;
    ...
}

服务方法注释:

@Cacheable(key = "#token", condition = "@authProperties.tokenCacheEnabled()")

结果如下:

org.springframework.expression.spel.SpelEvaluationException: EL1057E:(pos 1): No bean resolver registered in the context to resolve access to bean 'authProperties' at org.springframework.expression.spel.ast.BeanReference.getValueInternal(BeanReference.java:48)

有没有人知道问题出在哪里,或者有没有其他的方法可以达到这个目的?

共有1个答案

仲孙铭
2023-03-14

我找到了一种在我的情况下使其工作的方法,但我也找到了一张我认为是相同问题的bug票:https://jira.spring.io/browse/spr-13812

我的解决办法是将@injectMyauthproperties添加到包含我要缓存的方法的服务中。接下来,我将方法的缓存条件更改为:

    @Cacheable(key = "#token", condition = "#root.target.authProperties.tokenCacheEnabled")
 类似资料:
  • 我正在尝试使用spring Cache实现对我的方法的缓存。问题是第一次执行后这个方法没有被执行,这意味着属性没有被加载。如果我删除@cacheable注释,它工作得很好。我的要求是,每当添加新属性时,这个方法才应该运行并加载属性,否则它应该从缓存返回。 XML文件:

  • 主要内容:什么是应用程序缓存(Application Cache)?,浏览器支持,HTML5 Cache Manifest 实例,实例,Cache Manifest 基础,Manifest 文件,更新缓存,实例 - 完整的 Manifest 文件,关于应用程序缓存的说明使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。 注意:manifest 的技术已被 web 标准废弃,不再推荐使用此功能。 什么是应用程序缓存(Application Ca

  • 使用 HTML5,通过创建 cache manifest 文件,可以轻松地创建 web 应用的离线版本。 什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问。 应用程序缓存为应用带来三个优势: 离线浏览 - 用户可在应用离线时使用它们 速度 - 已缓存资源加载得更快 减少服务器负载 - 浏览器

  • 我在src/main/resources下创建了2个文件: 应用程序。属性 第一个具有从env变量中获取值的属性,而后者具有固定值。 根据这里的具体情况,我以这样的方式推出了Spring靴: 然而,不会产生任何影响,并且应用程序是局部的。属性似乎被忽略。 有什么提示吗?

  • Spring Boot文档说我们可以在application.properties文件中设置属性。 但我找不到列出可设置的可用属性的文档。 在哪里可以找到这样的文档? 例如,我想为嵌入式Servlet设置documentRoot。 我发现setDocumentRoot()方法是在AbstractembedDedServletContainerFactory.java中实现的。 但我不知道何时何地调

  • 我正在尝试关闭本地mysql数据库的ssl。但我无法在spring应用程序中找到实际属性。属性文件,该文件将执行此操作。 我当前的文件是: 我试过Spring。数据源。useSSl=false,这不起作用。我也尝试过spring。数据源。url=jdbc:mysql://localhost:3306/test