Spring IoC контейнер: абстракция Environment, профили определения компонентов, активация профиля
Теперь, когда мы обновили нашу конфигурацию, нам все еще нужно указать Spring, какой профиль активен. Если бы мы запустили наш пример приложения прямо сейчас, мы бы увидели исключение NoSuchBeanDefinitionException, потому что контейнер не смог найти bean-компонент Spring с именем dataSource.
Активация профиля может быть выполнена несколькими способами, но самый простой - это сделать это программно с помощью API среды, доступного через ApplicationContext. В следующем примере показано, как это сделать:
Java
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("development");
ctx.register(SomeConfig.class, StandaloneDataConfig.class, JndiDataConfig.class);
ctx.refresh();
Kotlin
val ctx = AnnotationConfigApplicationContext().apply {
environment.setActiveProfiles("development")
register(SomeConfig::class.java, StandaloneDataConfig::class.java, JndiDataConfig::class.java)
refresh()
}
Кроме того, вы также можете декларативно активировать профили через свойство spring.profiles.active, которое может быть указано через системные переменные среды, системные свойства JVM, параметры контекста сервлета в web.xml или даже как запись в JNDI. В интеграционных тестах активные профили могут быть объявлены с помощью аннотации @ActiveProfiles в модуле spring-test.
Обратите внимание, что профили не являются предложением "или-или". Вы можете активировать сразу несколько профилей. Программно вы можете предоставить несколько имен профилей методу setActiveProfiles(), который принимает String… varargs. В следующем примере активируется несколько профилей:
Java
ctx.getEnvironment().setActiveProfiles("profile1", "profile2");
Kotlin
ctx.getEnvironment().setActiveProfiles("profile1", "profile2")
Декларативно spring.profiles.active может принимать список имен профилей, разделенных запятыми, как показано в следующем примере:
-Dspring.profiles.active="profile1,profile2"
Читайте также:
- Spring IoC контейнер: абстракция Environment, профили определения компонентов, XML
- Spring IoC контейнер: абстракция Environment, профили определения компонентов
- Spring IoC контейнер: абстракция Environment, профили определения компонентов, использование @Profile
Комментарии
Отправить комментарий