在Spring boot中尝试获取Hikari池活动连接时发生java InstanceNotFoundException
我正在尝试获取Spring boot Hikari池中的活动连接数。在我的日志中,它打印两个池,分别命名为HikariPool-1
和HikariPool-2
@Slf4j
@RequiredArgsConstructor
public class HikariJmxElf {
private final ObjectName poolAccessor;
private final MBeanServer mBeanServer;
public HikariJmxElf(final String poolName) {
try {
mBeanServer = java.lang.management.ManagementFactory.getPlatformMBeanServer();
poolAccessor = new ObjectName("com.zaxxer.hikari:type=Pool (" + poolName + ")");
} catch (MalformedObjectNameException e) {
throw new RuntimeException("Pool " + poolName + " could not be found", e);
}
}
public int getIdleConnections() {
try {
return (Integer) mBeanServer.getAttribute(poolAccessor, "IdleConnections");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public int getActiveConnections() {
try {
return (Integer) mBeanServer.getAttribute(poolAccessor, "ActiveConnections");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public int getTotalConnections() {
try {
return (Integer) mBeanServer.getAttribute(poolAccessor, "TotalConnections");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
我正在尝试使用执行器信息端点获取数据
@Slf4j
@Component
@RequiredArgsConstructor
public class HikariPoolInfoContributor implements InfoContributor {
@Override
public void contribute(Info.Builder builder) {
builder
.withDetail("connectionDetails", new HikariJmxElf("HikariPool-1").getActiveConnections())
.build();
}
}
我得到的全部错误是
java.lang.RuntimeException: javax.management.InstanceNotFoundException: com.zaxxer.hikari:type=Pool (HikariPool-1)
我有这些问题
- mBeanServer服务器需要具有池名称的对象名称。HikariPool-1不是if的实际名称吗李>
- 有没有一种方法可以让所有的Hikari游泳池都不点名李>
# 1 楼答案
一旦访问令牌过期,我们可以通过向与上述相同的URL发送POST请求来刷新它,但包含刷新令牌而不是用户名和密码:
请查看下面的链接
https://www.baeldung.com/spring-boot-keycloak