【问题标题】:Change a default annotation value for all usages更改所有用法的默认注释值
【发布时间】:2018-08-10 09:21:37
【问题描述】:

Spring Boot(Micrometer 的一部分)中的@Timed 注解有几个字段。其中之一是:

double[] percentiles() default {};

我想将这个值在整个代码库中设置一次到不同的数组,比如:

new double[] { 0.0, 50.0 };

这可以通过我所知道的两种方式之一来实现:

  1. 在每个实例上设置字段:

    @Timed(percentiles = new double[] { 0.0, 50.0 })
    
  2. 使用@AliasFor 或元注释来创建具有所需值的不同注释。

我也遇到过AnnotationUtils 类,但看不到如何实现我的目标。

在 Spring Boot 中执行此操作的标准方法是什么?如果在 Spring Boot 中做不到,那如何利用 JDK 自带的反射能力呢?

【问题讨论】:

  • 执行此操作的标准方式是“不”。该默认值是设计使然,这是因为他们希望将其作为默认值
  • @Stultuske 有一个默认值可以更改。在您的统计数据中没有百分位数是完全没有用的。该值旨在被覆盖。
  • 是的,但并非针对所有可能的情况,那时它不再是默认值。除非实现选择了另一个值,否则默认值是备用值

标签: java spring-boot reflection annotations micrometer


【解决方案1】:

您可以使用@Timed 创建自己的元注释。详情见:https://github.com/micrometer-metrics/micrometer/issues/145

【讨论】:

  • 那是我的选项 2 - 我将编辑我的问题以明确我指的是元注释。我一直在寻找一种不使用新注释的方法,但如果不可能,我肯定会考虑这一点。谢谢!
  • AFAIK 这是实现您提到的目标的一般方法。
【解决方案2】:

如果您希望为整个应用程序中生成的所有直方图配置一组百分位数,您可以使用MeterFilter

千分尺文档:https://micrometer.io/docs/concepts#_configuring_distribution_statistics

在您的 Spring Boot 项目中,您可以将仪表过滤器创建为 bean,即。

    @Bean
    public MeterFilter meterFilter() {
        return new MeterFilter() {
            @Override
            public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
                return DistributionStatisticConfig.builder()
                        .percentiles(0.5, 0.75, 0.95, 0.98, 0.99)
                        .percentilesHistogram(true)
                        .build()
                        .merge(config);
            }
        };
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    相关资源
    最近更新 更多