如何在Spring启动应用程序中使用JMX MBean for HikariCP?

时间:2017-03-29 14:52:37

标签: java spring-boot jmx hikaricp

如何在Spring启动应用程序中使用JMX MBean for HikariCP?我有这样的代码:

@SpringBootApplication
public class App() { ... }

和其他班级一样:

@Configuration
public class DatabaseCfg() {
@Bean
@ManagedOperation
public DataSource ds (@Value("${hikari.proprerties}") String config) {
HikariConfig hikariConfig = new HikariConfig(config);
return new HikariDataSource(hikariConfig);
}

在Java Mission Control(或JMX控制台)中,只查看了Datasource托管bean,而不是HikariCP的JMX MBean(link)。是否可以添加它?

2 个答案:

答案 0 :(得分:1)

我相信你的hikariConfig你需要设置一些额外的设置。您需要注册MBean并在配置上设置池名称。

HikariConfig hiakriConfig = new HikariConfig(config);
hikariConfig.setRegisterMbeans(true);
kikariConfig.setPoolName("my-pool-1");

是的,你显然也可以通过这些物业开车。我不确定您是否将这些内容包含在您的属性文件中,因为它们未列出。另请注意,拼写属性错误(@Value(" $ {ds.proprerties}")应该应该是(@Value(" $ {ds.properties}")但是我不确定你实际上是如何命名变量和属性文件的。你可能想要仔细检查是否要设置所有属性。

答案 1 :(得分:0)

尝试一下。排除您的Hiakri DataSource Bean被Spring注册。

@Resource
private ObjectProvider<MBeanExporter> mBeanExporter;

@Bean("dataSource")
public DataSource createDataSource() {
    String url = hikariDataSourceConfig.getUrl();
    String username = hikariDataSourceConfig.getUsername();
    String password = hikariDataSourceConfig.getPassword();
    long idleTimeoutInMilliSeconds =
            hikariDataSourceConfig.getIdleTimeOutInMilliseconds();
    long maxLifetimeInMilliseconds =
            hikariDataSourceConfig.getMaxLifetimeInMilliseconds();
    int maximumPoolSize = hikariDataSourceConfig.getMaximumPoolSize();
    int minimumIdle = hikariDataSourceConfig.getMinimumIdle();
    String poolName = "HikariDataSource";
    HikariConfig hikariConfig = new HikariConfig();
    hikariConfig.setRegisterMbeans(true);
    hikariConfig.setJdbcUrl(url);
    hikariConfig.setUsername(username);
    hikariConfig.setPassword(password);
    hikariConfig.setIdleTimeout(idleTimeoutInMilliSeconds);
    hikariConfig.setMaxLifetime(maxLifetimeInMilliseconds);
    hikariConfig.setMaximumPoolSize(maximumPoolSize);
    hikariConfig.setMinimumIdle(minimumIdle);
    hikariConfig.setPoolName(poolName);
    HikariDataSource dataSource = new HikariDataSource(hikariConfig);
    mBeanExporter
            .ifUnique((exporter) -> exporter.addExcludedBean("dataSource"));
    return dataSource;
}