Closed10

SpringBoot2.4以降 spring.profilesの変更について の 調査メモ

yukiko_bassyukiko_bass

Spring Boot 2.4 からspring.profilesの記述方法・考え方がだいぶ変わって、今まで指定していた方法が効かなくなったのがことの発端。

yukiko_bassyukiko_bass

今までの

spring:
  profiles: dev
  profiles.include:
    - common

みたいに書いていたのが、そもそも反応しなくなった

yukiko_bassyukiko_bass

っていうかデフォルトのプロファイルを設定したいだけなのに、、、

yukiko_bassyukiko_bass

プロパティファイルのデフォルト設定はこのパラメータ(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";
yukiko_bassyukiko_bass

spring.profiles.defaultであってた

application.yml
spring:
  profiles:
    group:
      dev:
        - common
        - dev1
      stg:
        - common
        - stg1
      prod:
        - common
        - prod1
    default: dev
yukiko_bassyukiko_bass

プロパティ読み込めなかったらハングっちゃうのなんとかしてくれんか。。

yukiko_bassyukiko_bass

ここでずっと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));
	}
yukiko_bassyukiko_bass

application-xxx.yml と group名がかぶってるとアカンようだった。それはそうか。

application.yml
spring:
  profiles:
    group:
      dev:
        - common
        - dev1

ファイル構成

resources
- application-dev1.yml
- application-common.yml
- application.yml

これならいけた

このスクラップは2021/02/09にクローズされました