Профиль учебника по SpringBoot

Spring Boot

Для работы в разных средах приложение часто имеет разные конфигурации и логику обработки кода. Spring Boot обеспечивает простую поддержку для этого.

Ключевые слова:@Profile,spring.profiles.active

Различать конфигурацию среды

конфигурация свойств

Предположим, рабочая среда приложения: dev, test, prod

Затем мы можем добавить 4 файла конфигурации:

  • applcation.properties- публичная конфигурация
  • application-dev.properties- Конфигурация среды разработки
  • application-test.properties- Конфигурация тестовой среды
  • application-prod.properties- Конфигурация производственной среды

существуетapplcation.propertiesПрофиль можно активировать следующей конфигурацией в файле:

spring.profiles.active = test

YML-конфигурация

Подобно файлу свойств, мы также можем добавить 4 файла конфигурации:

  • applcation.yml- публичная конфигурация
  • application-dev.yml- Конфигурация среды разработки
  • application-test.yml- Конфигурация тестовой среды
  • application-prod.yml- Конфигурация производственной среды

существуетapplcation.ymlПрофиль можно активировать следующей конфигурацией в файле:

spring:
  profiles:
    active: prod

Кроме того, файл yml также может завершить настройку всех профилей в одном файле:

# 激活 prod
spring:
  profiles:
    active: prod
# 也可以同时激活多个 profile
# spring.profiles.active: prod,proddb,prodlog
---
# dev 配置
spring:
  profiles: dev

# 略去配置

---
spring:
  profiles: test

# 略去配置

---
spring.profiles: prod
spring.profiles.include:
  - proddb
  - prodlog

---
spring:
  profiles: proddb

# 略去配置

---
spring:
  profiles: prodlog
# 略去配置

Примечание: переход между разными профилями---сегментация

Код для различения сред

использовать@ProfileАннотации могут указывать, что класс или метод действует в определенной среде профиля.

Декоративный класс

@Configuration
@Profile("production")
public class JndiDataConfig {

    @Bean(destroyMethod="")
    public DataSource dataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

Украсьте аннотации

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Profile("production")
public @interface Production {
}

Способ модификации

@Configuration
public class AppConfig {

    @Bean("dataSource")
    @Profile("development")
    public DataSource standaloneDataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }

    @Bean("dataSource")
    @Profile("production")
    public DataSource jndiDataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
    }
}

активировать профиль

Профиль активации плагина

spring-boot:run -Drun.profiles=prod

Основной метод активирует профиль

--spring.profiles.active=prod

jar активировать профиль

java -jar -Dspring.profiles.active=prod *.jar

Активировать профиль в коде Java

Укажите переменную среды напрямую, чтобы активировать профиль:

System.setProperty("spring.profiles.active", "test");

Активируйте профиль в контейнере Spring:

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.getEnvironment().setActiveProfiles("development");
ctx.register(SomeConfig.class, StandaloneDataConfig.class, JndiDataConfig.class);
ctx.refresh();

исходный код

Полный пример:исходный код

Инструкции:

mvn clean package
cd target
java -jar -Dspring.profiles.active=prod sbe-core-profile.jar

Расширения и цитаты

расширение

Ссылаться на