Сообщения

Показаны сообщения с ярлыком "@Profile"

Spring IoC контейнер: абстракция Environment, профили определения компонентов, профиль по умолчанию

Изображение
Профиль по умолчанию представляет собой профиль, который включен по умолчанию. Рассмотрим следующий пример: Java @Configuration @Profile("default") public class DefaultDataConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") .build(); } } Kotlin @Configuration @Profile("default") class DefaultDataConfig { @Bean fun dataSource(): DataSource { return EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") .build() } } Если ни один профиль не активен, dataSource создается. Вы можете рассматривать это как способ предоставить определение по умолчанию для одного или нескольких компонентов. Если какой-либо профиль включен, профиль по ...

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 IoC контейнер: абстракция Environment, профили определения компонентов, использование @Profile

Изображение
Аннотация @Profile позволяет указать, что компонент имеет право на регистрацию, если активен один или несколько указанных профилей. Используя наш предыдущий пример , мы можем переписать конфигурацию источника данных следующим образом: Java @Configuration @Profile("development") public class StandaloneDataConfig { @Bean public DataSource dataSource() { return new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") .addScript("classpath:com/bank/config/sql/test-data.sql") .build(); } } Kotlin @Configuration @Profile("development") class StandaloneDataConfig { @Bean fun dataSource(): DataSource { return EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.HSQL) .addScript("classpath:com/bank/config/sql/schema.sql") .addScript(...