Реализация BeanDefinitionRegistryPostProcessor скрывает систему Prometheus и метрики JVM.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Реализация BeanDefinitionRegistryPostProcessor скрывает систему Prometheus и метрики JVM.

Сообщение Anonymous »


Я использую класс, который реализует BeanDefinitionRegistryPostProcessor, чтобы я мог использовать метод postProcessBeanDefinitionRegistry для создания экземпляров компонентов типа WebClient, добавления их в реестр, а затем использовать их через Autowired и Qualifier(nameBean) в другом классе.

Все в порядке, кроме того, что в метриках прометея я не вижу ни JVM, ни метрик типа системы.

У меня есть этот класс, который вызывается из META-INF/spring через re.test.pos.api.consumer.WebClientInstanceBuilderAutoConfiguration. Этот класс вызывает класс WebClientInstanceBuilder:

@Configuration @EnableConfigurationProperties({ ConsumerProperties.class }) @ConditionalOnClass(WebClient.class) @ConditionalOnBean(WebClient.Builder.class) общественный класс WebClientInstanceBuilderAutoConfiguration { @Бин @ConditionalOnMissingBean public WebClientInstanceBuilder webClientInstanceBuilder (среда среды, WebClient.Builder webClientBuilder) { WebClientInstanceBuilder webClientInstanceBuilder = новый WebClientInstanceBuilder (webClientBuilder); вернуть webClientInstanceBuilder; } } У меня есть класс WebClientInstanceBuilder, который реализует BeanDefinitionRegistryPostProcessor, и его цель — создать экземпляр компонента в методе postProcessBeanDefinitionRegistry

публичный класс WebClientInstanceBuilder реализует BeanDefinitionRegistryPostProcessor { ConsumerProperties ConsumerProperties; WebClient.Builder webClientBuilder; public WebClientInstanceBuilder(WebClient.Builder webClientBuilder) { this.webClientBuilder = webClientBuilder; } @Override public void postProcessBeanDefinitionRegistry (реестр BeanDefinitionRegistry) выдает BeansException { String beanKey = «accountManagementWebClient»; Клиент WebClient = webClientBuilder.clone().baseUrl("https://test.api:8443/test") .codecs(кодеки -> {codecs.defaultCodecs();}) .строить(); Определение GenericBeanDefinition = новое GenericBeanDefinition(); определение.setBeanClass(WebClient.class); определение.setInstanceSupplier(() -> клиент); реестр.registerBeanDefinition(beanKey, определение); } @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) бросает BeansException { } } И у меня есть класс, который использует компонент accountManagementWebClient

@Component публичный класс AccountManager { @Autowired @Qualifier("accountManagementWebClient") частная учетная запись WebClientWebClient; public String getAccountByBillingAccountId (String billingAccountId, String tumUserId) { WebClient theAccountWebClient = accountWebClient; пытаться { вернуть ноль; } catch (исключение ex) { бросить бывшего; } } } Все в порядке, кроме метрик прометея. Когда я смотрю на метрики Прометея, я не вижу метрик JMV. У меня есть application.properties:

management.server.port=4242 Management.endpoints.web.exposure.include=* Management.metrics.enable.all=истина Если я удалю реализацию BeanDefinitionRegistryPostProcessor и продолжу создавать WebClient Bean с другим решением, я смогу увидеть все метрики Prometheus, а также метрики jvm и системы. Но в этом случае у меня возникают проблемы с @Autowired для получения Bean, потому что, к сожалению, как только я удаляю реализацию BeanDefinitionRegistryPostProcessor, Autowired выполняется до создания экземпляра моих bean-компонентов.

Я пробовал много чего, но безуспешно.

Большое спасибо
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»