Большая часть моего конфигурационного файла приложения (например, application.yml) выглядит так:
datasource:
username: {database_username:root}
password: {database_password:root123}
sql-script-encoding: utf-8
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://{database_host:localhost}:3306/dbname?useUnicode=true&characterEncoding=utf-8
Если переменная окружения присутствует, приложение загрузит конфигурацию из окружения. в противном случае будет использоваться значение по умолчанию.
После этого вы можете собрать один пакет и запускать его везде.
В моем случае я создаю приложение в образ докера и запускаю в kubernetes, чтобы свойства конфигурации сохранялись в ConfigMaps и Secret.
Когда Pod работает, загружаются файлы конфигурации и секретная переменная окружения.
И, конечно, вы можете использовать и другие инструменты.