有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Spring boot中尝试获取Hikari池活动连接时发生java InstanceNotFoundException

我正在尝试获取Spring boot Hikari池中的活动连接数。在我的日志中,它打印两个池,分别命名为HikariPool-1HikariPool-2

enter image description here

@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)

我有这些问题

  1. mBeanServer服务器需要具有池名称的对象名称。HikariPool-1不是if的实际名称吗
  2. 有没有一种方法可以让所有的Hikari游泳池都不点名

共 (1) 个答案

  1. # 1 楼答案

    一旦访问令牌过期,我们可以通过向与上述相同的URL发送POST请求来刷新它,但包含刷新令牌而不是用户名和密码:

    请查看下面的链接

    https://www.baeldung.com/spring-boot-keycloak