code: public static PropertiesEndpointGroup of(ClassLoader classLoader, String resourceName,
                                               String endpointKeyPrefix, int defaultPort) {
          validateDefaultPort(defaultPort);
          return new PropertiesEndpointGroup(loadEndpoints(
                  requireNonNull(classLoader, "classLoader"),
                  requireNonNull(resourceName, "resourceName"),
                  requireNonNull(endpointKeyPrefix, "endpointKeyPrefix"),
                  defaultPort));
      }
docs: Creates a new {@link EndpointGroup} instance that loads the host names (or IP address) and the port
  numbers of the {@link Endpoint} from the {@code resourceName} resource file. The resource file must
  contain at least one property whose name starts with {@code endpointKeyPrefix}:
  
  <pre>{@code
  example.hosts.0=example1.com:36462
  example.hosts.1=example2.com:36462
  example.hosts.2=example3.com:36462
  }</pre>
  
  @param resourceName the name of the resource where the list of {@link Endpoint}s is loaded from
  @param endpointKeyPrefix the property name prefix
  @param defaultPort the default port number to use
  
  @throws IllegalArgumentException if failed to load any hosts from the specified resource file