docs: @Override
      public Publisher<PropertySource> getPropertySources(Environment environment) {
          if (!awsParameterStoreConfiguration.isEnabled()) {
              return Flowable.empty();
          }
          Set<String> activeNames = environment.getActiveNames();
          Optional<String> serviceId = Optional.ofNullable(this.serviceId);
  
  
          String path = awsParameterStoreConfiguration.getRootHierarchyPath();
          if (!path.endsWith("/")) {
              path += "/";
          }
  
          String pathPrefix = path.substring(1);
          String commonConfigPath = path + Environment.DEFAULT_NAME;
          String commonPrefix = commonConfigPath.substring(1);
          final boolean hasApplicationSpecificConfig = serviceId.isPresent();
          String applicationSpecificPath = hasApplicationSpecificConfig ? path + serviceId.get() : null;
          String applicationPrefix = hasApplicationSpecificConfig ? applicationSpecificPath.substring(1) : null;
  
          Flowable<ParametersWithBasePath> configurationValues = Flowable.fromPublisher(getParametersRecursive(commonConfigPath));
  
          if (hasApplicationSpecificConfig) {
              configurationValues = Flowable.concat(
                      configurationValues,
                      Flowable.fromPublisher(getParametersRecursive(applicationSpecificPath)));
          }
          if (activeNames != null && activeNames.size() > 0) {
              // look for the environment configs since we can't wildcard partial paths on aws
              for (String activeName : activeNames) {
                  String environmentSpecificPath = commonConfigPath + "_" + activeName;
                  configurationValues = Flowable.concat(
                          configurationValues,
                          Flowable.fromPublisher(getParametersRecursive(environmentSpecificPath)));
  
                  if (applicationSpecificPath != null) {
                      String appEnvironmentSpecificPath = applicationSpecificPath + "_" + activeName;
                      configurationValues = Flowable.concat(
                              configurationValues,
                              Flowable.fromPublisher(getParametersRecursive(appEnvironmentSpecificPath)));
                  }
              }
  
          }
  
          final Map<String, Map<String, Object>> propertySources = new HashMap<>();
          final Flowable<ParametersWithBasePath> parameterFlowable = configurationValues;
          Flowable<PropertySource> propertySourceFlowable = Flowable.create(emitter -> {
              parameterFlowable.subscribe(
                      parametersWithBasePath -> {
                          if (parametersWithBasePath.parameters.isEmpty()) {
                              return;
                          }
                          String key = parametersWithBasePath.basePath;
                          boolean isCommonConfigKey = key.substring(1).startsWith(commonPrefix);
                          boolean isApplicationSpecificConfigKey = hasApplicationSpecificConfig && key.substring(1).startsWith(applicationPrefix);
                          boolean validKey = isCommonConfigKey || isApplicationSpecificConfigKey;
                          if (validKey) {
                              String fullName = key.substring(pathPrefix.length() + 1);
                              Set<String> propertySourceNames = calcPropertySourceNames(fullName, activeNames);
                              Map<String, Object> properties = convertParametersToMap(parametersWithBasePath);
                              for (String propertySourceName : propertySourceNames) {
                                  Map<String, Object> values = propertySources.computeIfAbsent(propertySourceName, s -> new LinkedHashMap<>());
                                  values.putAll(properties);
                              }
                          }
                      },
                      emitter::onError,
                      () -> {
                          for (Map.Entry<String, Map<String, Object>> entry : propertySources.entrySet()) {
                              String name = entry.getKey();
                              int priority = EnvironmentPropertySource.POSITION + (name.endsWith("]") ? PRIORITY_TOP : PRIORITY_DOWN);
                              if (hasApplicationSpecificConfig && name.startsWith(serviceId.get())) {
                                  priority += PRIORITY_INCREMENT;
                              }
                              emitter.onNext(PropertySource.of(Route53ClientDiscoveryConfiguration.SERVICE_ID + '-' + name, entry.getValue(), priority));
                          }
                          emitter.onComplete();
                      });
          }, BackpressureStrategy.ERROR);
  
          propertySourceFlowable = propertySourceFlowable.onErrorResumeNext(AWSParameterStoreConfigClient::onPropertySourceError);
  
          if (executionService != null) {
              return propertySourceFlowable.subscribeOn(io.reactivex.schedulers.Schedulers.from(
                      executionService
              ));
          } else {
              return propertySourceFlowable;
          }
  
      }