tl; dr Поместите файлы, которые вы хотите изменить, за пределы вашего пути к классам, потому что они перезаписываются файлами в вашем каталоге <projectDir>/src/main/resources
при сборке / упаковке вашего проекта.Если вы хотите увидеть код для этого, проверьте конец ответа.
Причина, по которой это происходит, наиболее вероятна, потому что при перезапуске сервера ваш проект перестраивается.Во время этого процесса каждый класс перекомпилируется, и скомпилированные классы помещаются в отдельный каталог вместе со всеми ресурсами (<projectDir>/target/classes/
при использовании maven).Это заменит вашу измененную версию json-файла оригинальной из вашего каталога <projectDir>/src/main/resources
.
Это можно проверить, отладив метод newQuery
и выполнив следующие действия:
- Проверьте местоположение вашего файла JSON с
File.getAbsolutePath()
.Для меня это <projectDir>/target/classes/QueryMap.json
. - Проверьте содержимое файла, оно должно быть в исходном состоянии.
- Пусть ваш код внесет изменения, а затем перепроверьте содержимое файла.Изменения должны быть там.
- Остановите сервер и пересоберите ваш проект (с maven
mvn clean package
). - Содержимое файла должно снова быть в своем первоначальном состоянии, потому что процесс сборкизаменил
<projectDir>/target/classes/QueryMap.json
на <projectDir>/src/main/resources/QueryMap.json
.
Одним из решений этой проблемы будет использование файла json в вашем пути к классам по умолчанию и копирование его в текущий рабочий каталог, где вы можете изменить его любымтак, как вы хотите:
File editableQueryMap = new File("./QueryMap.json");
if (!editableQueryMap.exists()) {
File defaultQueryMap = new ClassPathResource("QueryMap.json").getFile();
try (OutputStream os = Files.newOutputStream(editableQueryMap.toPath())) {
Files.copy(defaultQueryMap.toPath(), os);
}
}
//do your changes with editableQueryMap here
Для меня это помещает редактируемый файл QueryMap.json
в корневой каталог моего проекта.Если вы используете файл jar, он должен поместить файл в тот же каталог, что и jar (если только не изменен рабочий каталог).