Установка активного профиля по умолчанию в Spring -boot
Я хочу, чтобы мой активный профиль по умолчанию был production
, если -Dspring.profiles.active
не установлен.
Я пробовал следующее в моем application.properties
, но он не работал:
spring.profiles.default=production
Spring -boot version = 1.3.5.RELEASE
Ответы
Ответ 1
Что вы здесь делаете, установите профиль по умолчанию по умолчанию (профиль, который используется для любого bean, если вы не укажете аннотацию @Profile
), чтобы быть production
.
На самом деле вам нужно установить профиль активный по умолчанию:
spring.profiles.active=production
Ответ 2
добавить --spring.profiles.active=production
Пример:
java -jar file.jar --spring.profiles.active=production
Ответ 3
Поместите это в App.java:
public static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(App.class);
SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args);
if (!source.containsProperty("spring.profiles.active") &&
!System.getenv().containsKey("SPRING_PROFILES_ACTIVE")) {
app.setAdditionalProfiles("production");
}
...
}
Вот как это делается в JHipster
Ответ 4
Я делаю это так
System.setProperty("spring.profiles.default", "dev");
в самом начале main(...)
Ответ 5
Если вы используете maven, я бы сделал что-то вроде этого:
Будучи production вашим профилем по умолчанию:
<properties>
<activeProfile>production</activeProfile>
</properties>
И как пример других профилей:
<profiles>
<!--Your default profile... selected if none specified-->
<profile>
<id>production</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<activeProfile>production</activeProfile>
</properties>
</profile>
<!--Profile 2-->
<profile>
<id>development</id>
<properties>
<activeProfile>development</activeProfile>
</properties>
</profile>
<!--Profile 3-->
<profile>
<id>otherprofile</id>
<properties>
<activeProfile>otherprofile</activeProfile>
</properties>
</profile>
<profiles>
В вашем приложении application.properties вам необходимо установить:
[email protected]@
Это работает для меня каждый раз, надеюсь, что он решает вашу проблему.
Ответ 6
Мы сталкивались с подобной проблемой при установке spring.profiles.active
в Java.
Это то, что мы выяснили в конце, попробовав четыре различных способа предоставления spring.profiles.active
.
В java-8
$ java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ java -jar my-service.jar --spring.profiles.active=dev
# This works fine
$ java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ java -jar my-service.jar -Dspring.profiles.active=dev
# This does not works
В java-11
$ java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ java -jar my-service.jar --spring.profiles.active=dev
# This does not works
$ java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ java -jar my-service.jar -Dspring.profiles.active=dev
# This does not works
ПРИМЕЧАНИЕ: Если вы указываете spring.profiles.active
в своем файле application.properties
, убедитесь, что вы предоставили опцию spring.config.location
или spring.config.additional-location
для java соответственно, как указано выше.
Ответ 7
Прежде всего, с помощью решения, приведенного ниже, необходимо понимать, что при загрузке всегда будет читаться файл application.properties
. Таким образом, только другие файлы профиля будут дополнять и заменять свойства, определенные ранее.
Учитывая следующие файлы:
application.properties
application-qa.properties
application-prod.properties
1) Очень важно application.properties
и только этот файл должны иметь следующую строку:
[email protected]@
2) Измените то, что вы хотите в файлах конфигурации QA и PROD, чтобы увидеть разницу между средами.
3) В командной строке запустите приложение весенней загрузки с одним из следующих параметров:
Это запустит приложение с файлом application.properties
по умолчанию:
mvn spring-boot:run
Он загрузит файл application.properties
по умолчанию и после файла application-qa.properties
, заменив и/или дополнив конфигурацию по умолчанию:
mvn spring-boot:run -Dspring.profiles.active=qa
То же самое здесь, но с производственной средой вместо QA:
mvn spring-boot:run -Dspring.profiles.active=prod
Ответ 8
В настоящее время используется Maven + Spring Boot. Наше решение было следующим:
application.properties
#spring.profiles.active= # comment_out or remove
securityConfig.java
@Value(${spring.profiles.active:[default_profile_name]}")
private String ACTIVE_PROFILE_NAME;
Кредит начинается с MartinMlima. Подобный ответ предоставлен здесь:
Как получить текущий активный/заданный по умолчанию профиль среды программным способом в Spring?
Ответ 9
В AWS LAMBDA:
Для $ sam local
вы добавляете следующую строку в yml файл шаблона sam:
Resources:
FunctionName:
Properties:
Environment:
Variables:
SPRING_PROFILES_ACTIVE: local
Но в Консоли AWS: в ваших переменных Lambda Environment просто добавьте:
KEY: JAVA_TOOL_OPTIONS
VALUE: -Dspring.profiles.active=dev
![enter image description here]()
Ответ 10
Можно создать отдельные файлы свойств приложения в зависимости от среды, если создается приложение Spring Boot. Например - файл свойств для среды разработки, application-dev.properties:
spring.hivedatasource.url=<hive dev data source url>
spring.hivedatasource.username=dev
spring.hivedatasource.password=dev
spring.hivedatasource.driver-class-name=org.apache.hive.jdbc.HiveDriver
application-test.properties:
spring.hivedatasource.url=<hive dev data source url>
spring.hivedatasource.username=test
spring.hivedatasource.password=test
spring.hivedatasource.driver-class-name=org.apache.hive.jdbc.HiveDriver
И основной файл application.properties для выбора профиля:
application.properties:
spring.profiles.active=dev
server.tomcat.max-threads = 10
spring.application.name=sampleApp
Определите конфигурацию БД, как показано ниже:
@Configuration
@ConfigurationProperties(prefix="spring.hivedatasource")
public class DBConfig {
@Profile("dev")
@Qualifier("hivedatasource")
@Primary
@Bean
public DataSource devHiveDataSource() {
System.out.println("DataSource bean created for Dev");
return new BasicDataSource();
}
@Profile("test")
@Qualifier("hivedatasource")
@Primary
@Bean
public DataSource testHiveDataSource() {
System.out.println("DataSource bean created for Test");
return new BasicDataSource();
}
Это автоматически создаст компонент BasicDataSource в соответствии с активным профилем, установленным в файле application.properties. Запустите приложение Spring-boot и протестируйте.
Обратите внимание, что это создаст пустой bean-компонент первоначально до вызова getConnection(). Как только соединение станет доступно, вы можете получить URL-адрес, класс драйвера и т.д., Используя этот компонент DataSource.
Ответ 11
Если вы используете AWS Lambda с SprintBoot, вы должны объявить следующее в переменных среды:
ключ: JAVA_TOOL_OPTIONS & значение: -Dspring.profiles.active = dev