我目前正在开发一个解决方案,为微文件容错框架设置度量标记。我们将其与度量一起使用,但不能通过容错注释直接设置标签。
因此,我们想出了一个变通方法,通过Interceptor设置ThreadLocal
值,然后由自定义ConfigSource
读取。ConfigSource
在其getValue(final String propertyName)
方法中检查"mp.metrics.tags"
和"MP_METRICS_TAGS"
配置密钥。如果每次处理容错注释时都会调用getValue
,那么这基本上是可行的。但情况似乎并非如此,方法的调用是随机发生的。
在我的观点中,ConfigSources和它们的getValue(final String propertyName)
应该总是被调用,因为开发人员可能依赖于每秒都可能更改的配置值。
你知道为什么不调用配置源吗?
当多次或至少在服务器启动阶段返回null
时,似乎不再调用自定义ConfigSource
。在上面提到的场景中,可以通过返回一个空字符串来绕过它。然后,在运行时对每个getValue()
方法调用也调用ConfigSource
。
MicroProfile Config 1.4规范指出,不应缓存ConfigSource
的值,因此,如果您的MicroProfile ConfigConfig
实现(您没有说明它是哪个实现(正在缓存对ConfigSource#getValue()
的调用结果,则它是不兼容的,据我所知(规范有缺陷,不太严格,TCK也参差不齐,但在这个问题上似乎很清楚(。
(请注意,给定的ConfigSource
实现当然可能决定从其getValue()
方法返回缓存的值。(