[spring-projects/spring-boot]添加缓存执行器端点以列出和清除缓存

2024-04-29 982 views
3

此提交添加了一个执行器端点,该端点列出了每个上下文和缓存管理器的缓存,并提供了删除操作来清除缓存。由于统计信息是通过指标端点公开的,因此它们不包括在内

关闭#2625

回答

1

很好,谢谢。

7

参见#2625

4

@snicoll 感谢您的评论。我从 liquibaseEndpoint 复制了一些内容,因此可以处理多个上下文。

0

我已将端点重命名为CachesEndpoint.我删除了对复杂上下文结构的处理。我删除了多余的配置元数据。

我没有将cacheManager设为a,@Selector因为将其作为queryParam允许删除所有cacheManager上的所有缓存。

6

也许添加一种从该Cache区域删除单个条目的方法是个好主意?最好还列出给定缓存区域中的所有条目,但当前的 spring 缓存 API 不允许这样做(jcache 允许这样做)。

3

@ptahchiev 请不要扩大此 PR 的范围。列出缓存的内容肯定不在议程上。 PR 合并后,我们可以完善支持(或者您可以在合并后提交一份)。

1

添加了空检查并重新设置为 master

7

我们已经讨论了一些事情,并且想要不同的输出格式。我们希望列出具有名称的缓存,当它们是具有相同名称的两个缓存时,可能会添加对缓存管理器的引用。我不喜欢添加引用惩罚的想法CacheManager,因为绝大多数应用程序只有一个引用,而且我也不喜欢在那里使用 bean 名称的想法。

我们还讨论了该POST操作应该只删除给定名称的缓存,并能够在发生冲突时进一步限定(但是,IMO,这是不应该发生的极端情况)。

我还不确定如何构建读取操作,因此我们需要多考虑一下。我们将使用此 PR 作为这项工作的基础。

6

我也不喜欢在那里使用 bean 名称的想法。

如果我们需要在两个 CacheManager 中出现重复名称的情况下限定缓存,我想没有什么可以区分缓存了

如何将缓存逐出的链接渲染到响应中,并在缓存名称前面加上前缀以防出现歧义?缺点是:它需要端点的 mvc 扩展,并且在使用 MXBean 的情况下没有阐明用法

{
  "caches": [
    {
      "name": "manager-foo/ambiguousName",
      "_links": {
        "evict": "/actuator/caches/manager-foo/ambiguousName"
      }
    },
    {
      "name": "manager-bar/ambiguousName",
      "_links": {
        "evict": "/actuator/caches/manager-bar/ambiguousName"
      }
    },
    {
      "name": "uniqueName",
      "_links": {
        "evict": "/actuator/caches/manager-bar/uniqueName"
      }
    }
  ]
}

...如果缓存名称包含它/需要在链接中编码...

1

@joshiste 我想到的更多的是一个可以限定缓存的属性

{
  "caches": [
    {
      "name": "ambiguousName",
      "cacheManager": "manager-foo"
    },
    {
      "name": "ambiguousName",
      "cacheManager": "manager-bar"
    },
    {
      "name": "uniqueName",
      "cacheManager": "manager-foo"
    }
  ]
}

这些链接在那里也不太受欢迎(如果我们想这样做,我们应该在端点 API 级别一致地这样做,因为这些链接对于 JMX 来说是无用且无关的)。

7

我已经按照您的建议修改了读取操作的输出。

8

@joshiste 感谢您的公关。在审查时,我重新设计并显着更改了最初的提案,请参阅 fb8a5a9 了解更多详细信息。

5

耶!感谢合并!