web-dev-qa-db-ja.com

SpringBootアプリケーションでHikariCPおよびDropwizard / Coda-Haleメトリックを構成するにはどうすればよいですか

Dropwizardメトリックを有効にする方法についてHikariCPwikiで 手順 を読むと、MetricsRegistryまたはHikariConfigHikariDatasourceインスタンスを構成するだけであると書かれています。

問題は、Spring Bootでは、すべての構成が自動構成によって処理されるため、HikariCPプールを手動で構成していないことです。

これを行う方法についての指示はありますか?独自のBeanを定義し、すべての設定を@Configurationファイルに設定して、自動構成を完全にオーバーライドする必要がありますか?

13
Kevin M

したがって、Java構成ファイルでHikariCPを手動で構成することで、これを理解することができました。これにより、Spring Boot MetricRegistryへの参照を取得でき、HikariConfigで設定できました。これが私の構成クラス:

@Configuration
public class DatasourceConfiguration {

    @Value("${spring.datasource.username}")
    private String user;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${spring.datasource.url}")
    private String dataSourceUrl;

    @Value("${spring.datasource.driverClassName}")
    private String driverClassName;

    @Value("${spring.datasource.connectionTestQuery}")
    private String connectionTestQuery;

    @Autowired
    private MetricRegistry metricRegistry;

    @Bean
    public DataSource primaryDataSource() {
        Properties dsProps = new Properties();
        dsProps.setProperty("url", dataSourceUrl);
        dsProps.setProperty("user", user);
        dsProps.setProperty("password", password);

        Properties configProps = new Properties();
        configProps.setProperty("connectionTestQuery", connectionTestQuery);
        configProps.setProperty("driverClassName", driverClassName);
        configProps.setProperty("jdbcUrl", dataSourceUrl);

        HikariConfig hc = new HikariConfig(configProps);
        hc.setDataSourceProperties(dsProps);
        hc.setMetricRegistry(metricRegistry);
        return new HikariDataSource(hc);
    }
}
15
Kevin M

または、SpringBootでデータソースを構成します。@ Configuration/@ SpringBootApplicationクラスでDataSourceとMetricRegistryを@Autowireし、@ PostConstructでそれらを相互に接続します。

@Autowired
private DataSource dataSource;

@Autowired
private MetricRegistry metricRegistry;


@PostConstruct
public void setUpHikariWithMetrics() {
    if(dataSource instanceof HikariDataSource) {
        ((HikariDataSource) dataSource).setMetricRegistry(metricRegistry);
    }
}
12
Svante