Quarkus 在注释数字参数中使用配置属性

问题描述 投票:0回答:1

我正在寻找如何将配置参数从 Quarkus 中的 yaml 文件插入到 Quarkus 中定时注释中的数字 double[] 参数,例如百分位参数

@Timed(value = "some_metric", percentiles = {0.90, 0.95})

类似的东西

@Timed(value = "some_metric", percentiles = "${percentile.default.setting}")

但显然不被接受,因为百分位数不是字符串参数

有什么办法可以解决这个问题吗?

annotations quarkus
1个回答
0
投票

创建自定义

MeterFilter
解决了这个问题。

以下类可以通过应用程序配置覆盖

percentiles
值。

自定义百分位数可以配置为

metrics.[metric-name].percentiles
,例如:

my-metrics:
  second_metric:
    percentiles:
      - 0.50
      - 0.60
      - 0.90
@Singleton
public class CustomMeterFilter {

    @SuppressWarnings("unchecked")
    private static final Class<double[]> configClass = (Class<double[]>) Array.newInstance(double.class, 0).getClass();

    @Produces
    @Singleton
    public MeterFilter customPercentiles() {
        return new MeterFilter() {
            @Override
            public DistributionStatisticConfig configure(Meter.Id id, DistributionStatisticConfig config) {
                return ConfigProvider.getConfig()
                        .getOptionalValue(String.format("my-metrics.%s.percentiles", id.getName()), configClass)
                        .map(percentiles -> DistributionStatisticConfig.builder()
                                .percentiles(percentiles)
                                .build()
                                .merge(config))
                        .orElse(config);
            }
        };
    }
}

更多选项可参见官方文档

© www.soinside.com 2019 - 2024. All rights reserved.