JDBC не регистрирует метрики при весенней загрузке 2, когда @RefreshScope включен в компонент DataSource Bean - PullRequest
0 голосов
/ 19 октября 2018

У меня есть приложение, которое использует пружинную загрузку 2 и регистрирует показатели из микрометра.Я хочу периодически регистрировать jdbc (mysql) min, max и активные соединения.Я также хочу использовать @RefreshScope для моего bean-компонента источника данных, чтобы предотвратить исключения привязки hikari при внедрении конфигов на лету из весеннего администратора.Я обнаружил, что когда я использую @RefreshScope для класса конфигурации / bean-компонента источника данных, JDBC не регистрируется в MeterRegistry.

Можно ли зарегистрировать JDBC в MeterRegistry с помощью @RefreshScope?

Есть ли способ прогамматически зарегистрировать JDBC с помощью MeterRegistry в моем определении компонента?

@Configuration
@EnableAutoConfiguration
@EnableTransactionManagement
@RefreshScope
public class DbConfig {

@Primary
@Bean(name = "dataSource")
@RefreshScope
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
    return DataSourceBuilder.create().build();
}

Удаление @RefreshScope позволяет JDBC автоматически регистрироваться в MeterRegistry, но вызывает приведенное ниже исключение при изменении конфигурации: org.springframework.boot.context.properties.ConfigurationPropertiesBindException: Ошибка при создании bean-компонента с именем «dataSource»: невозможно привязать свойства к «HikariDataSource»: prefix = spring.datasource, ignoreInvalidFields = false, ignoreUnknownFields = true;Вложенное исключение - org.springframework.boot.context.properties.bind.BindException: не удалось связать свойства из «spring.datasource» с javax.sql.DataSource

1 Ответ

0 голосов
/ 19 октября 2018

Добавить javax.sql.DataSource в качестве дополнительной обновляемой.application.yml пример файла:

spring:
  cloud:
    refresh.extra-refreshable:
      - javax.sql.DataSource

и удалите @RefreshScope из вашего класса.Другое решение было бы привести DataSource к HikariDataSource.Я использую первое решение, потому что создание источника данных выполняется внешней библиотекой в ​​моем приложении.

Ссылка: https://github.com/spring-cloud/spring-cloud-commons/issues/318

...