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

Bla*_*nie 5 java jmx spring-boot hikaricp

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

@SpringBootApplication
public class App() { ... }
Run Code Online (Sandbox Code Playgroud)

和其他类:

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

在 Java Mission Control(或 JMX 控制台)中,只看到数据源托管 bean,而不是 HikariCP 的 JMX MBean(链接)。是否也可以添加?

小智 5

在 Spring Boot 2.0+ 中,您可以在 application.properties 文件中设置 register-mbeans 属性

spring.datasource.hikari.register-mbeans = true
Run Code Online (Sandbox Code Playgroud)

如果您使用的是较早版本的 Spring Boot,则还必须设置数据源

spring.datasource.type = com.zaxxer.hikari.HikariDataSource 
Run Code Online (Sandbox Code Playgroud)


小智 1

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

HikariConfig hiakriConfig = new HikariConfig(config);
hikariConfig.setRegisterMbeans(true);
kikariConfig.setPoolName("my-pool-1");
Run Code Online (Sandbox Code Playgroud)

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