Вариант 1. Для большинства приложений с реальными словами свойства не упаковываются напрямую с источниками, поскольку могут содержать разумную информацию (например, пароль базы данных).Простое решение этой проблемы состоит в том, чтобы поместить свойства приложения в файловую систему, а затем ссылаться на них с аргументом spring.config.location
java java -jar demo-0.0.1-SNAPSHOT.jar -Dspring.config.location=/etc/demo/application.properties
таким образом, чтобы вы оставили application.properties внеупакованный jar, и вы можете анализировать и заменять значения в файле application.properties с вашей цепочкой инструментов развертывания (например, ansible) для каждой среды соответственно.
здесь можно найти несколько полезных документов: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Вариант 2: использовать профили.В ресурсах classpath у вас могут быть основные application.properties, в которых хранятся свойства, общие для всех сред, а затем одно application- {env} .properties для каждой среды с определенными ключами, например application-dev.properties, application-int.properties,application-prod.properties ...
При запуске вы указываете активный профиль, а затем переменную среды spring.profiles.active:
java -jar -Dspring.profiles.active=prod demo-0.0.1-SNAPSHOT.jar