replaceAll здесь лишнее; первый аргумент - это регулярное выражение, и вам это явно не нужно. Просто используйте .replace, который, несмотря на название, также заменяет все.
replaceAll (и replace) не изменяют строку (строки в java являются неизменяемыми). Они делают новый. Итак, вместо imageEncoding.replaceAll(" ", "")
попробуйте: imageEncoding = imageEncoding.replace(" ", "")
Вы можете попробовать вызвать защищенный метод mergeProperties , используя отражение, чтобы получить полный список свойств, а затем, как уже говорили другие плакаты, удалить все свойства которые на самом деле используются для получения набора неиспользуемых свойств.
Возможно, слишком хакерский для производственного кода, но я предполагаю, что вы будете запускать это только в настройках модульного теста для создания этого отчета.
Как насчет создания собственного подкласса PropertyPlaceholderConfigurer, который будет хранить ссылку на его объект Properties и предоставлять метод доступа. После этого ваш BeanFactoryPostProcessor сможет получить доступ к каждому исходному объекту Properties, а в сочетании со списком используемых свойств вы сможете определить свойства, которые не использовались.
Не могли бы вы просто перебрать список используемых свойств и удалить их из повторяющегося набора всех свойств? Остались неиспользованные.