Как использовать Spring Загрузочные профили

i имеют application.yml, application-dev.yml и application-dev.yml

  • Я использую команду maven mvn spring-boot:run -Dspring.profiles.active=dev, она не работает, и я не могу выбрать профиль dev с помощью mvn spring-boot:run. Как его выбрать?
  • В документации говорится, что java -jar XXX.jar --spring.profiles.active=dev работает, и я попробовал -Dspring.profiles.active=dev, но это не сработало. И в моем проекте я использую java -jar XXX.jar, он работает, но если я использую java -jar XXX.jar --spring.profiles.active=dev для выбора профиля dev, консоль печатает так много журналов и предупреждает, что я никогда не вижу используемого java -jar XXX.jar, и скажите мне APPLICATION FAILED TO START

так как решить две проблемы? спасибо ~

Ответ 1

Я не уверен, что полностью понимаю вопрос, но постараюсь ответить, предоставив несколько подробностей о профилях в Spring Boot.

Для вашего примера № 1, согласно документам, вы можете выбрать профиль с помощью плагина Spring Boot Maven с помощью -Drun.profiles.

Изменить: для Spring Boot 2. 0+ run был переименован в spring-boot.run

mvn spring-boot:run -Drun.profiles=dev

http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

Из вашего примера №2 вы определяете активный профиль после имени банки. Вы должны предоставить аргумент JVM перед именем используемого вами jar файла.

java -jar -Dspring.profiles.active=dev XXX.jar

Общая информация:

Вы упоминаете, что у вас есть application.yml и application-dev.yml. Работа с профилем dev фактически загрузит оба файла конфигурации. Значения из application-dev.yml переопределяют те же значения, которые предоставлены application.yml, но будут загружены значения из обоих файлов yml.

Существует также несколько способов определения активного профиля.

Вы можете определить их так же, как и вы, используя -Dspring.profiles.active при запуске вашей банки. Вы также можете установить профиль с помощью переменной среды SPRING_PROFILES_ACTIVE или системного свойства spring.profiles.active.

Более подробную информацию можно найти здесь:http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-set-active-spring-profiles

Ответ 3

Для этого вам не нужны три файла .yml. Вы можете иметь один файл application.yml и записывать в него свойства, специфичные для профиля, где каждый раздел профиля разделен 3 дефисами (---)

Далее, для выбора текущего активного профиля, вы также можете указать это в своем файле application.yml, например:

spring:
  profiles:
    active:
    - local

Однако эта конфигурация будет переопределена, если вы установите переменную Environment, например: SPRING_PROFILES_ACTIVE = dev


Вот пример файла для вашего требования:

# include common properties for every profile in this section

server.port: 5000 

spring:
  profiles:
    active:
    - local

---
# profile specific properties

spring:
  profiles: local

  datasource:
    url: jdbc:mysql://localhost:3306/
    username: root
    password: root

---
# profile specific properties

spring:
  profiles: dev

  datasource:
    url: jdbc:mysql://<dev db url>
    username: <username>
    password: <password>

Ответ 4

Если вы используете maven, определите свои профили, как показано ниже в вашем pom.xml

<profiles>
<profile>
    <id>local</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>
<profile>
    <id>dev</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
</profile>
<profile>
    <id>prod</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>

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

Чтобы выбрать определенный профиль в Spring Boot 2.xx, используйте команду ниже.

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

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

mvn clean install -Pdev -DprofileIdEnabled=true

Ответ 5

Вы можете указать свойства по профилям в одном приложении application.properties(yml), например здесь. затем mvn clean spring-boot:run -Dspring.profiles.active=dev должен работать правильно. Это работает для меня

Ответ 6

Создайте конкретные файлы .yml в каталоге ресурсов для каждой среды (например, dev, qa, stg и т.д.), Которая необходима для запуска приложения. образ файлов .yml в каталоге ресурсов

Если вы используете spring-boot-maven-plugin 2.0.5.RELEASE в своем файле pom.xml, вы можете добавить профили в тег зависимостей следующим образом. изображение pom.xml spring-boot-maven-plugin (вы можете настроить несколько профилей, используя несколько тегов профиля)

Затем вы можете использовать следующие команды для сборки и запуска проекта.

1) mvn clean install
2) mvn spring-boot:run -Dspring-boot.run.default==qa

Тогда вы увидите, что профиль по умолчанию установлен как qa при запуске проекта. отображение профиля по умолчанию при запуске приложения

Ответ 7

Аннотация @Profile позволяет вам указать, что компонент имеет право на регистрацию, когда один или несколько указанных профилей активны. Используя наш пример выше, мы можем переписать конфигурацию источника данных следующим образом:

@Configuration
@Profile("dev")
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();
    }
}

И другой:

@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");
    }
}

Ответ 8

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

** Source- **https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

В основном это необходимо, когда в вашем проекте присутствует несколько application- {environment}.properties. по умолчанию, если вы передали -Drun.profiles в командной строке или activeByDefault true в

 <profile>
    <id>dev</id>
    <properties>
        <activatedProperties>dev</activatedProperties>
    </properties>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
</profile>

Ничто из описанного выше не будет выбрано по умолчанию application.properties, в противном случае вам нужно будет выбрать, добавив -Drun.profiles = {dev/stage/prod}.

TL; DR

mvn spring-boot:run -Drun.profiles=dev