code: @Override
    public Properties getConfiguration(Environment environment) {
  
      boolean allMissEnvironment = true;
  
      for (ConfigurationSource source : sources) {
        try {
          return source.getConfiguration(environment);
        } catch (MissingEnvironmentException e) {
          // NOP
        } catch (IllegalStateException e) {
          allMissEnvironment = false;
        }
      }
  
      if (allMissEnvironment) {
        throw new MissingEnvironmentException(environment.getName());
      }
  
      throw new IllegalStateException();
    }
docs: Get configuration set for a given {@code environment} from this source in a form of {@link Properties}.
  The configuration set is a result of the first {@link ConfigurationSource#getConfiguration(Environment)}
  call to underlying sources that succeeds. Sources are called in a provided order.
  
  @param environment environment to use
  @return configuration set for {@code environment} from the first source that works
  @throws MissingEnvironmentException when requested environment couldn't be found in any of the underlying source
  @throws IllegalStateException       when unable to fetch configuration from any of the underlying sources