private boolean hasEffectiveValueChanged(final PropertyPath fullPath,
                                             final Optional<String> effectiveValueBefore,
                                             final SourceType sourceBefore) {

        final ConfigProperty configProperty = globalPropertiesMap.get(fullPath);
        final Optional<String> effectiveValueAfter = configProperty.getEffectiveValue();
        final SourceType sourceAfter = configProperty.getSource();

        LOGGER.trace(() -> LogUtil.message("effectiveValueBefore: [{}] ({}), effectiveValueAfter [{}] ({})",
                effectiveValueBefore,
                sourceBefore,
                effectiveValueAfter,
                sourceAfter));

        if (!Objects.equals(effectiveValueBefore, effectiveValueAfter)) {

            // Stop it logging 'changes' when we boot up and there are differences from the default
            // which there likely always will be
            if (haveYamlOverridesBeenInitialised && haveDbOverridesBeenInitialised) {
                LOGGER.info(
                        "Effective value of {} has changed on this node from [{}] ({}) to [{}] ({})",
                        fullPath,
                        effectiveValueBefore.orElse(""),
                        sourceBefore,
                        effectiveValueAfter.orElse(""),
                        sourceAfter);
            }
//            }
            return true;
        } else {
            LOGGER.trace("Values are equal for {}", fullPath);
            return false;
        }
    }
@param dbConfigProperty The config property object obtained from the database
@return The updated typed value from the object model
stroom-config/stroom-config-global-impl/src/main/java/stroom/config/global/impl/ConfigMapper.java