Spring boot не загружает профиль по умолчанию при использовании spring.profile.default в application.properties - PullRequest
1 голос
/ 16 октября 2019

К вашему сведению: я клянусь, что нет конфигурации активирующего профиля, такой как -D или конфигурация запуска

Цель

Когда приложение загружается без какого-либо активирующего профиля,dev профиль активирован по умолчанию.

Проблема

Я установил spring.profile.default = dev, и я ожидаю, что профиль разработчика активирован. Но это не так.

То, что я сделал

Run Environment

Spring-Boot-версия: 2.1.2 Release

What I'm referred

1) Как использовать профили в приложении Spring Boot - https://www.javacodegeeks.com/2019/07/profiles-spring-boot-application.html#respond

Вот код, который я сделал

/resources/application.properties

spring.profiles.default= dev

application.environment=This is a "Default" Environment

/resources/application-dev.properties

application.environment=This is a "dev" Environment
server.port= 8082

/ProfileController.java

@RestController
@RequestMapping("/v1")
public class ProfileController {

    @Value("${application.environment}")
    private String applicationEnv;

    @GetMapping
    public String getApplicationEnv(){
        return applicationEnv;
    }
}

Результат

localhost / v1 => Это среда по умолчанию

И

Я обнаружил, что профиль по умолчанию настроен как dev.

Это мой журнал весенней загрузки.

2019-10-16 23: 17: 02.926 INFO 64099 --- [main] cesSpringbootdemoappApplication: активный профиль не задан, откат к профилям по умолчанию: dev

Добавить еще один журнал для порта сервера

2019-10-17 00: 25: 03.837 ИНФОРМАЦИЯ 68318 --- [main] osbwembedded.tomcat.TomcatWebServer: Tomcat инициализирован с портом (портами): 8083 (http)

Причина, которую я добавляю, заключается в том, что это не проблема, связанная с инъекцией.

Время закрыть этот вопрос

Первая цель, которую я хочу достичь, - изменить профиль по умолчанию. Из Spring Docs (https://docs.spring.io/spring/docs/4.2.0.RELEASE/spring-framework-reference/htmlsingle/#beans-definition-profiles-default), профиль по умолчанию можно изменить как настройку spring.profiles.default в application.properties.

Но это похоже на ошибку (Спасибо @Antoniossss). Даже если я установил этов application.properties и консоль показала No active profile set, falling back to default profiles: dev. Тем не менее, профиль dev не был активирован.

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

Это означает, что если изменение профиля по умолчанию описано в application.properties, уже слишком поздно (хотя IDK, почему я не могу понять, потому что в Spring так много слоев ..).) Если профиль défaut настроен с использованием -Dspring.default.profile = dev, он работает правильно.

С https://github.com/spring-projects/spring-boot/issues/1219:

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

Ответы [ 3 ]

1 голос
/ 17 октября 2019

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

Передать его как аргументы JVM

java -jar -Dspring.profiles.default=dev myproject.jar

Передать как переменную среды

java -jar myproject.jar --spring.profiles.default=dev

Системная переменная

SPRING_PROFILES_DEFAULT=dev
0 голосов
/ 16 октября 2019

Вы устанавливаете резервный профиль по умолчанию на dev с spring.profiles.default=dev. Если бы у вас было spring.profiles.active=someOtherProfile, вы бы активировали someOtherProfile.

2019-10-16 23: 17: 02.926 INFO 64099 --- [main] cesSpringbootdemoappApplication: активный профиль не установлен, падаетвернуться к профилям по умолчанию: dev

В этом журнале указано, что dev профиль является активным, поскольку у вас не активирован явный профиль.

0 голосов
/ 16 октября 2019

Вы настроили только профиль по умолчанию. Вам нужно установить активный профиль как spring.profiles.active=dev в свойствах вашего приложения. Для ввода текущего активного профиля,

@Value("${spring.profiles.active}")
private String currentActiveEnv;
...