java - Spring中注解处理的顺序(@Cacheable和@Timed)

标签 java spring spring-cache micrometer

我想用 @Cacheable 注释我的方法还有@Timed (从千分尺)。
但我想要 @Timed仅在数据未定时的情况下应用。
有没有办法做到这一点,以正确的顺序放置注释是否足够 - 那将是哪个顺序?

我的 @Timed也在使用 TimedAspect ,不确定这是否相关。

现在我这样做如下:

@Cacheable
@Timed
public String getValue(long id) {
    ...
}

我找不到 @Cacheable 的任何文档那将讨论这个。

最佳答案

这很棘手,因为您正在处理 Spring 围绕您的业务 bean 创建的 AOP 代理,所以我不确定您是否可以依赖注释的顺序。

我认为你有几个选择:

  • 您可能希望重构您的代码以具有多种方法,一种标记为 @Cacheable另一个是 @Timed .但是,我认为这对您不起作用,因为您需要多个 bean(对同一个 bean 的调用不会被 AOP 代理拦截)。因此,您需要两个 bean,一个充当外观,另一个执行实际的 @Timed您想要缓存和监控的昂贵调用。
  • 另一种选择可能是同时扩展 @Timed@Cacheable并实现Orderable在这两个接口(interface)中,然后在你的 bean 中使用它们。我不完全确定这会奏效,因为这取决于如何拾取注释。沿着这条线:Specifying the order of proxy creation in Spring

  • 希望能帮助到你。

    关于java - Spring中注解处理的顺序(@Cacheable和@Timed),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58688985/

    相关文章:

    java - Spring Redis 在使用@Cacheable 或@CachePut 时将 POJO 保存为不同的类型

    java - 缓存拦截器调用被忽略

    java - 创建单例工厂

    java - Spring Security 远程授权

    java - 当方法没有参数时使用@CacheResult

    java - 我如何(或应该)将方面建议应用于动态代理?

    java - 如何在 spring mvc Controller 中传递查询?

    Java API,可以识别两个XML文件之间的差异

    java.lang.NoClassDefFoundError : org/hibernate/Session hibernate jars is set 错误

    java - 使用数组时 ColumnConstraints.setPercentWidth() 不起作用