@Nullable
    @Override
    public RequestContextStorageProvider requestContextStorageProvider() {
        final String providerFqcn = System.getProperty(PREFIX + "requestContextStorageProvider");
        if (providerFqcn == null) {
            return null;
        }
        final List<RequestContextStorageProvider> providers = FlagsUtil.getRequestContextStorageProviders();
        if (providers.isEmpty()) {
            throw new IllegalArgumentException(
                    providerFqcn + " is specified, but no " +
                    RequestContextStorageProvider.class.getSimpleName() + " is found");
        }
        final List<RequestContextStorageProvider> matchedCandidates =
                providers.stream()
                         .filter(provider -> provider.getClass().getName().equals(providerFqcn))
                         .collect(toImmutableList());
        if (matchedCandidates.isEmpty()) {
            throw new IllegalArgumentException(
                    providerFqcn + " does not match any " +
                    RequestContextStorageProvider.class.getSimpleName() + ". providers: " + providers
            );
        }
        if (matchedCandidates.size() > 1) {
            throw new IllegalArgumentException(
                    providerFqcn + " matches more than one " +
                    RequestContextStorageProvider.class.getSimpleName() + ". providers: " + providers);
        }
        return matchedCandidates.get(0);
    }
Implementation of {@link FlagsProvider} which provides values from JVM options to {@link Flags}.
core/src/main/java/com/linecorp/armeria/common/SystemPropertyFlagsProvider.java