private static List<Endpoint> loadEndpoints(Properties properties, String endpointKeyPrefix,
                                                int defaultPort) {
        if (!endpointKeyPrefix.endsWith(".")) {
            endpointKeyPrefix += ".";
        }
        final List<Endpoint> newEndpoints = new ArrayList<>();
        for (Entry<Object, Object> e : properties.entrySet()) {
            final String key = (String) e.getKey();
            final String value = (String) e.getValue();

            if (key.startsWith(endpointKeyPrefix)) {
                final Endpoint endpoint = Endpoint.parse(value);
                newEndpoints.add(defaultPort == 0 ? endpoint : endpoint.withDefaultPort(defaultPort));
            }
        }
        return ImmutableList.copyOf(newEndpoints);
    }
Returns a new {@link PropertiesEndpointGroupBuilder} created from the file at the specified
{@link Path}. Any updates in the file will trigger a dynamic reload. The value of each property
whose name starts with {@code endpointKeyPrefix} will be parsed with {@link Endpoint#parse(String)},
and then loaded into the {@link PropertiesEndpointGroup}, e.g.

<pre>{@code
# endpointKeyPrefix = 'example.hosts.'
example.hosts.0=example1.com:36462
example.hosts.1=example2.com:36462
example.hosts.2=example3.com:36462
}</pre>

@param path the path of the file where list of {@link Endpoint}s is loaded from
@param endpointKeyPrefix the property name prefix
core/src/main/java/com/linecorp/armeria/client/endpoint/PropertiesEndpointGroup.java