@PostConstruct public void initialize() { DataSource primaryDataSource = getPrimaryDataSource(); DataSourcePoolMetadataProvider provider = new DataSourcePoolMetadataProviders( this.providers); for (Map.Entry<String, DataSource> entry : this.applicationContext .getBeansOfType(DataSource.class).entrySet()) { String beanName = entry.getKey(); DataSource bean = entry.getValue(); String prefix = createPrefix(beanName, bean, bean.equals(primaryDataSource)); DataSourcePoolMetadata poolMetadata = provider .getDataSourcePoolMetadata(bean); if (poolMetadata != null) { this.metadataByPrefix.put(prefix, poolMetadata); } } }
@Bean public DataSourcePoolMetadataProvider hikariPoolDataSourceMetadataProvider() { return dataSource -> { if (dataSource instanceof DecoratedDataSource) { dataSource = ((DecoratedDataSource) dataSource).getRealDataSource(); } if (dataSource instanceof HikariDataSource) { return new HikariDataSourcePoolMetadata((HikariDataSource) dataSource); } return null; }; }
@Test public void testReturnDataSourcePoolMetadataProviderForHikari() { EnvironmentTestUtils.addEnvironment(context, "spring.datasource.type:" + HikariDataSource.class.getName()); context.register(DataSourceAutoConfiguration.class, DataSourceDecoratorAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class); context.refresh(); DataSource dataSource = context.getBean(DataSource.class); Assertions.assertThat(dataSource).isInstanceOf(DecoratedDataSource.class); DataSourcePoolMetadataProviders poolMetadataProvider = new DataSourcePoolMetadataProviders(context.getBeansOfType(DataSourcePoolMetadataProvider.class).values()); DataSourcePoolMetadata dataSourcePoolMetadata = poolMetadataProvider.getDataSourcePoolMetadata(dataSource); Assertions.assertThat(dataSourcePoolMetadata).isInstanceOf(HikariDataSourcePoolMetadata.class); }
@Test public void testReturnDataSourcePoolMetadataProviderForTomcat() { context.register(DataSourceAutoConfiguration.class, DataSourceDecoratorAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class); context.refresh(); DataSource dataSource = context.getBean(DataSource.class); Assertions.assertThat(dataSource).isInstanceOf(DecoratedDataSource.class); DataSourcePoolMetadataProviders poolMetadataProvider = new DataSourcePoolMetadataProviders(context.getBeansOfType(DataSourcePoolMetadataProvider.class).values()); DataSourcePoolMetadata dataSourcePoolMetadata = poolMetadataProvider.getDataSourcePoolMetadata(dataSource); Assertions.assertThat(dataSourcePoolMetadata).isInstanceOf(TomcatDataSourcePoolMetadata.class); }
@Test public void testReturnDataSourcePoolMetadataProviderForDbcp2() { EnvironmentTestUtils.addEnvironment(context, "spring.datasource.type:" + org.apache.commons.dbcp2.BasicDataSource.class.getName()); context.register(DataSourceAutoConfiguration.class, DataSourceDecoratorAutoConfiguration.class, PropertyPlaceholderAutoConfiguration.class); context.refresh(); DataSource dataSource = context.getBean(DataSource.class); Assertions.assertThat(dataSource).isInstanceOf(DecoratedDataSource.class); DataSourcePoolMetadataProviders poolMetadataProvider = new DataSourcePoolMetadataProviders(context.getBeansOfType(DataSourcePoolMetadataProvider.class).values()); DataSourcePoolMetadata dataSourcePoolMetadata = poolMetadataProvider.getDataSourcePoolMetadata(dataSource); Assertions.assertThat(dataSourcePoolMetadata).isInstanceOf(CommonsDbcp2DataSourcePoolMetadata.class); }
public DataSourceMetrics(DataSource dataSource, Collection<DataSourcePoolMetadataProvider> metadataProviders, String name, Iterable<Tag> tags) { this.name = name; this.tags = tags; this.dataSource = dataSource; DataSourcePoolMetadataProvider provider = new DataSourcePoolMetadataProviders(metadataProviders); this.poolMetadata = provider.getDataSourcePoolMetadata(dataSource); }
public DataSourceConfig(DataSource dataSource, Collection<DataSourcePoolMetadataProvider> metadataProviders, MeterRegistry registry) { new DataSourceMetrics( dataSource, metadataProviders, "data.source", emptyList()).bindTo(registry); }
@Autowired public DataSourceMetrics( Map<String, DataSource> dataSources, Collection<DataSourcePoolMetadataProvider> providers) { this.dataSources = dataSources; this.provider = new DataSourcePoolMetadataProviders(providers); }
@Bean public DataSourceMetricsBinder dataSourceMetricsBinder(ApplicationContext applicationContext, Collection<DataSourcePoolMetadataProvider> metadataProviders, MeterRegistry registry) { return new DataSourceMetricsBinder(applicationContext, metadataProviders, registry); }
public DataSourceMetricsBinder(ApplicationContext applicationContext, Collection<DataSourcePoolMetadataProvider> metadataProviders, MeterRegistry registry) { this.applicationContext = applicationContext; this.metadataProviders = metadataProviders; this.registry = registry; }
@Bean @ConditionalOnMissingBean public DataSourcePoolMetadataProvider dataSourcePoolMetadataProvider() { return this::getDataSourcePoolMetadata; }
public DataSourcesHealthIndicatorConfiguration( ObjectProvider<Map<String, DataSource>> dataSourcesProvider, ObjectProvider<Collection<DataSourcePoolMetadataProvider>> metadataProvidersProvider) { this.dataSources = dataSourcesProvider.getIfAvailable(); this.metadataProviders = metadataProvidersProvider.getIfAvailable(); }
@Bean @ConditionalOnMissingBean @ConditionalOnBean(DataSourcePoolMetadataProvider.class) public DataSourcePublicMetrics dataSourcePublicMetrics() { return new DataSourcePublicMetrics(); }