synchronized void decorateAllDbConfigProperties(final Collection<ConfigProperty> dbConfigProperties) {

        int changeCount = dbConfigProperties.stream()
                .mapToInt(configProperty -> {
                    final Tuple2<ConfigProperty, Boolean> tuple2 = decorateDbConfigProperty(
                            configProperty,
                            defaultPropertiesMap);

                    final boolean hasChanged = tuple2._2;
                    return hasChanged
                            ? 1
                            : 0;
                })
                .sum();

        LOGGER.debug("Change count A: {}", changeCount);

        // Now ensure all propertyMap props not in the list of db props have no db override set.
        // I.e. another node could have removed the db override.
        final Map<PropertyPath, ConfigProperty> dbPropsMap = dbConfigProperties.stream()
                .collect(Collectors.toMap(ConfigProperty::getName, Function.identity()));

        changeCount += globalPropertiesMap.entrySet()
                .stream()
                .filter(entry -> entry.getValue().hasDatabaseOverride())
                .filter(entry -> !dbPropsMap.containsKey(entry.getKey()))
                .mapToInt(entry -> {
//                    try {
                    final ConfigProperty globalProp = entry.getValue();
                    final Optional<String> effectiveValueBefore = globalProp.getEffectiveValue();
                    final SourceType sourceBefore = globalProp.getSource();

                    globalProp.setDatabaseOverrideValue(OverrideValue.unSet(String.class));
                    // Not in the DB so make sure it has no ID, e.g. if the prop is in the db on boot
                    // then get changed back to default val (which removes it from the db) we would hold
                    // an old ID for it, which would break future updates
                    globalProp.setId(null);

                    final boolean hasChanged = hasEffectiveValueChanged(
                            globalProp.getName(), effectiveValueBefore, sourceBefore);

                    return hasChanged
                            ? 1
                            : 0;
                })
                .sum();

        LOGGER.debug("Change count B: {}", changeCount);

        // This may be the first call after booting the app so ensure the yaml is set up too
        if (!haveYamlOverridesBeenInitialised) {
            changeCount += refreshGlobalPropYamlOverrides(bootStrapConfig);
        }

        LOGGER.debug("Change count C: {}", changeCount);

        if (changeCount > 0) {
            rebuildObjectInstanceMap();
        }

        if (!haveDbOverridesBeenInitialised) {
            haveDbOverridesBeenInitialised = true;
        }
    }
Verifies that the passed value for the property with fullPath can be converted into
the appropriate object type
stroom-config/stroom-config-global-impl/src/main/java/stroom/config/global/impl/ConfigMapper.java