Подтвердить что ты не робот

Установка активного профиля по умолчанию в Spring -boot

Я хочу, чтобы мой активный профиль по умолчанию был production, если -Dspring.profiles.active не установлен.

Я пробовал следующее в моем application.properties, но он не работал:

spring.profiles.default=production

Spring -boot version = 1.3.5.RELEASE

4b9b3361

Ответ 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