Вот краткая шпаргалка по переопределению настроек Java/Spring Boot приложений «на лету». *** ## Шпаргалка: Когда нужно изменить один или несколько параметров, не залезая внутрь `.jar`. ### 1\. Аргументы командной строки \(Самый быстрый\) Параметры передаются в самом конце команды через `--`. Имеют **самый высокий** приоритет. * **Синтаксис:** `java -jar app.jar --имя.параметра=значение` * **Пример (изменить порт):** Bash ```bash java -jar xml.jar --server.port=9090 ``` * **Пример (несколько параметров):** Bash ```bash java -jar xml.jar --server.port=9090 --spring.datasource.password=qwerty ``` *** ### 2\. Переменные окружения \(ENV\) Идеально для Docker, Kubernetes или CI/CD. Spring автоматически сопоставляет их с полями в YAML. * **Правило трансформации:** Точки заменяются на подчеркивания, буквы — в верхний регистр. * **Пример:** `spring.datasource.url` ➡ `SPRING_DATASOURCE_URL` * **Запуск:** Bash ``` export SERVER_PORT=8081 java -jar xml.jar ``` *** ### 3\. Внешний файл \(Дополнение\) Если параметров много, лучше вынести их в отдельный `.yml`, который "наложится" поверх внутреннего. * **Флаг:** `--spring.config.additional-location` * **Запуск:** Bash ``` java -jar xml.jar --spring.config.additional-location=file:/app/mock/xml/extra-config.yml ``` *В `extra-config.yml` пишите только те строки, которые хотите изменить.* *** ### Приоритет (кто кого перекрывает) Spring собирает конфиг как слоеный пирог. Если параметр указан везде, сработает тот, что выше в списке: | **Приоритет** | **Способ** | **Описание** | | --------- | ------ | -------- | | **1 (Высший)** | **CLI Arguments** | `--server.port=9090` | | **2** | **Env Variables** | `export SERVER_PORT=9090` | | **3** | **External YAML** | Файл рядом с JAR или через `additional-location` | | **4 (Низший)** | **Internal YAML** | Тот, что зашит внутри `src/main/resources` | *** > **💡 Совет:** > Помните, что параметры JVM (память, GC) передаются **ДО** `-jar`, а параметры приложения (порты, логи) — **ПОСЛЕ**. > `java -Xmx2g -jar app.jar --server.port=8080` Нужно ли подготовить пример того, как прокинуть такие параметры через **Docker Compose**?