public ClientPoolProperty<V> build() {
      GenericKeyedObjectPoolConfig<V> poolConfig = new GenericKeyedObjectPoolConfig<>();
      poolConfig.setMaxTotalPerKey(maxClientNumForEachNode);
      poolConfig.setMaxIdlePerKey(maxClientNumForEachNode);
      poolConfig.setTimeBetweenEvictionRuns(Duration.ofMillis(timeBetweenEvictionRuns));
      poolConfig.setMinEvictableIdleTime(Duration.ofMillis(minIdleTimeForClient));
      poolConfig.setMaxWait(Duration.ofMillis(waitClientTimeoutMs));
      poolConfig.setTestOnReturn(true);
      poolConfig.setTestOnBorrow(true);
      return new ClientPoolProperty<>(poolConfig);
    }
the duration to sleep between runs of the idle object evictor thread. When non-positive, no
idle object evictor thread will be run, which means clients that are idle for more than
{@code minIdleTimeForClient} will never be cleaned up.
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/client/property/ClientPoolProperty.java