Существует ли определенный порядок, когда для разрешения свойства используются несколько профилей.
У меня есть файл конфигурации yaml:
name: none
---
spring:
profiles: prod
name: prodName
---
spring:
profiles: dev
name: devName
Когда приложение работает без профиля (по умолчанию), none
печатается. Для профилей dev / prod печатается devName / prodName (пока все хорошо).
Когда я пытался определить профиль как dev,prod
prodName
, когда я указываю prod,dev
devName
печатается .
Это то, на что я могу положиться? Я имею в виду, это указано в Spring? Я не нашел его здесь .
полная версия (для репликации)
application.yml
name: none
---
spring:
profiles: dev
name: devName
---
spring:
profiles: prod
name: prodName
Конфигурация. java
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
@ConfigurationProperties
public class Configuration {
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
SpringBootConsoleApplication. java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.List;
@SpringBootApplication
public class SpringBootConsoleApplication implements CommandLineRunner {
private static Logger LOG = LoggerFactory.getLogger(SpringBootConsoleApplication.class);
@Autowired
Configuration conf;
public static void main(String[] args) {
SpringApplication.run(SpringBootConsoleApplication.class, args);
}
@Override
public void run(String... args) {
LOG.info("name: {}", conf.name);
}
}
edit:
GitHub репозиторий
пример вывода:
c:\betlista\SpringPropertyResolutionMultipleProfiles>java -jar target\spring-boot-console-app-1.0.jar
...: name: none, label: labelValue
c:\betlista\SpringPropertyResolutionMultipleProfiles>java -jar -Dspring.profiles.active=dev target\spring-boot-console-app-1.0.jar
...: name: devName, label: labelValue
c:\betlista\SpringPropertyResolutionMultipleProfiles>java -jar -Dspring.profiles.active=dev,prod target\spring-boot-console-app-1.0.jar
...: name: prodName, label: labelValue
c:\betlista\SpringPropertyResolutionMultipleProfiles>java -jar -Dspring.profiles.active=prod,dev target\spring-boot-console-app-1.0.jar
...: name: devName, label: labelValue
редактировать 2:
Темы
Возник вопрос, который я бы назвал темами - Файл с несколькими свойствами для одного профиля пружины
Хотя с файлами свойств можно использовать @PropertySource
, его нельзя использовать с файлами YAML. Единственное решение, которое я знаю на данный момент, это использовать, например, -Dspring.config.additional-location=classpath:topic1.yml