Closed10
SpringBoot2.4以降 spring.profilesの変更について の 調査メモ
Spring Boot 2.4 からspring.profilesの記述方法・考え方がだいぶ変わって、今まで指定していた方法が効かなくなったのがことの発端。
今までの
spring:
profiles: dev
profiles.include:
- common
みたいに書いていたのが、そもそも反応しなくなった
公式ドキュメントを見ても、結構変わってる
っていうかデフォルトのプロファイルを設定したいだけなのに、、、
プロパティファイルの記述方法については、こちらの方の記事のどちらかを採用すれば良さそう
プロパティファイルのデフォルト設定はこのパラメータ(spring.profiles.default)かな?
AbstractEnvironment.java
/**
* Name of property to set to specify active profiles: {@value}. Value may be comma
* delimited.
* <p>Note that certain shell environments such as Bash disallow the use of the period
* character in variable names. Assuming that Spring's {@link SystemEnvironmentPropertySource}
* is in use, this property may be specified as an environment variable as
* {@code SPRING_PROFILES_ACTIVE}.
* @see ConfigurableEnvironment#setActiveProfiles
*/
public static final String ACTIVE_PROFILES_PROPERTY_NAME = "spring.profiles.active";
/**
* Name of property to set to specify profiles active by default: {@value}. Value may
* be comma delimited.
* <p>Note that certain shell environments such as Bash disallow the use of the period
* character in variable names. Assuming that Spring's {@link SystemEnvironmentPropertySource}
* is in use, this property may be specified as an environment variable as
* {@code SPRING_PROFILES_DEFAULT}.
* @see ConfigurableEnvironment#setDefaultProfiles
*/
public static final String DEFAULT_PROFILES_PROPERTY_NAME = "spring.profiles.default";
spring.profiles.defaultであってた
application.yml
spring:
profiles:
group:
dev:
- common
- dev1
stg:
- common
- stg1
prod:
- common
- prod1
default: dev
プロパティ読み込めなかったらハングっちゃうのなんとかしてくれんか。。
ここでずっとwhlie loop抜けてなかった。。いや、設定してない私悪いんだが。。
どうせずっと抜けれないならExceptionにしてくれないだろうか(2.4.1で治ってるかな)
org.springframework.boot.context.config.Profiles.java
private List<String> expandProfiles(List<String> profiles) {
Deque<String> stack = new ArrayDeque<>();
asReversedList(profiles).forEach(stack::push);
Set<String> expandedProfiles = new LinkedHashSet<>();
while (!stack.isEmpty()) {
String current = stack.pop();
expandedProfiles.add(current);
asReversedList(this.groups.get(current)).forEach(stack::push);
}
return asUniqueItemList(StringUtils.toStringArray(expandedProfiles));
}
application-xxx.yml と group名がかぶってるとアカンようだった。それはそうか。
application.yml
spring:
profiles:
group:
dev:
- common
- dev1
ファイル構成
resources
- application-dev1.yml
- application-common.yml
- application.yml
これならいけた
このスクラップは2021/02/09にクローズされました