Как использовать 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
Ответ 2
Если вы используете плагин Spring Boot Maven, запустите:
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
(https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html)
Ответ 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