добавление нового свойства на основе весеннего профиля

77
8

Если весенняя загрузка выполняется в профиле override, можем ли мы иметь application-override.properties, имеющие свойства, такие как foo.baz которые не определены в application.properties?

application.properties

foo.bar=1

application-override.properties

spring.profiles.include=default 
foo.baz=1

спросил(а) 2021-01-25T20:49:07+03:00 4 месяца, 2 недели назад
1
Решение
89

Короче говоря: Spring boot переопределяет значения свойств с одинаковыми именами в соответствии с порядком их оценки. Но здесь вы не переопределяете ни одно свойство, вы добавляете новое.

Это еще проще: Spring boot просто добавляет его в среду Spring.
Просто запустите приложение, указав этот профиль и убедитесь, что свойства расположены в местах, ожидаемых Spring Boot.

Пример из толстой банки (системное свойство Java):

java -Dspring.profiles.active=override -jar foo.jar

Пример из исходного кода (свойство Maven):

mvn spring-boot:run -Dspring-boot.run.profiles=override

ответил(а) 2021-01-25T20:49:07+03:00 4 месяца, 2 недели назад
77

Вы можете создать класс конфигурации для своего пользовательского профиля и загрузить в него соответствующий файл свойств следующим образом:

@Configuration
@Profile("override")
@PropertySource("classpath:application-override.properties")
public class OverrideConfig {

}

Таким образом, вся конфигурация, которую вы выполняете в OverrideConfig (включая получение свойств из application-override.properties), будет загружаться только в том случае, если в application.properties включен профиль переопределения, например:

spring.profiles.active=override

ответил(а) 2021-01-25T20:49:07+03:00 4 месяца, 2 недели назад
77

Это правильно. Если у вас есть новые свойства в application-override.properties а профиль переопределения является активным профилем, то да, в вашей программе загружаются свойства из application.properties а также application-override.properties.

Использование spring.profiles.include=default в вашем профиле переопределения не требуется.

В случае загрузки нескольких конкретных профилей с одинаковыми свойствами:

Кроме того, в контексте переопределения свойств с профилями следует иметь в виду, что у вас есть несколько активных профилей, и они содержат одно и то же свойство. Последний профиль в списке будет использоваться.

Допустим, вы запускаете вашу программу с помощью mvn spring-boot:run -Drun.profiles=profile1,profile2

И application-profile1.properties и application-profile2.properties содержат свойство my.custom-property=x (для profile1) и my.custom-property=y (для profile2). Значение my.custom-property будет y, так как это был последний профиль в предоставленных профилях.

ответил(а) 2021-01-25T20:49:07+03:00 4 месяца, 2 недели назад
45

Да, вы можете использовать spring.profiles так:

spring.profiles=override

и вы положили название вашего профиля, в вашем случае override

ответил(а) 2021-01-25T20:49:07+03:00 4 месяца, 2 недели назад
45

Да, вы можете сделать это, просто добавив имя профиля в application.properties:

application-override.properties

Затем вы можете загрузить профиль из командной строки:

java -jar foo.jar --spring.profiles=override

источник: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-change-configuration-depending-on-the-environment

Spring сначала загрузит application.properties а затем любые application-{profile}.properties.

Другой вариант - использовать yaml и загрузить все в один файл:

foo:
bar: 1

---

spring:
profiles: override
foo:
baz: 1

---

spring:
profiles: otherOverride
foo:
bar: 2
baz: 2

ответил(а) 2021-01-25T20:49:07+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема