web-dev-qa-db-ja.com

ThymeleafでSpringアプリケーション環境を取得する

私のSpring Bootアプリケーションは3つの構成で実行されます:

  • application.properties->開発環境用
  • application-test.properties->テスト環境用
  • application-production.properties->実稼働環境用

アプリケーションが実行されているthymeleaf環境に入るにはどうすればよいですか?

本番環境でのみGoogle Analyticsコードを含める必要があります。

29
occurred

一度にアクティブにできるプロファイルが1つだけの場合は、次のことができます。

_<div th:if="${@environment.getActiveProfiles()[0] == 'production'}">
  This is the production profile - do whatever you want in here
</div>
_

上記のコードは、ThymeleafのSpring方言で_@_記号を使用してBeanにアクセスできるという事実に基づいています。そしてもちろん、Environmentオブジェクトは常にSpring Beanとして利用できます。

また、EnvironmentにはメソッドgetActiveProfiles()があり、標準のSpring ELを使用して呼び出すことができる文字列の配列を返す(つまり、私の回答で_[0]_が使用されている理由です)ことに注意してください。

一度に複数のプロファイルがアクティブな場合、より堅牢なソリューションは、アクティブなプロファイルに文字列productionが存在するかどうかを確認するために、Thymeleafの_#arrays_ユーティリティオブジェクトを使用することです。その場合のコードは次のようになります。

_<div th:if="${#arrays.contains(@environment.getActiveProfiles(),'production')}">
     This is the production profile
</div>
_
40
geoand

ビューのグローバル変数を設定できるこのクラスを追加するだけです:

@ControllerAdvice
public class BuildPropertiesController {

    @Autowired
    private Environment env;

    @ModelAttribute("isProd")
    public boolean isProd() {
        return Arrays.asList(env.getActiveProfiles()).contains("production");
    }
}

そして、${isProd} thymeleafファイルの変数:

<div th:if="${isProd}">
     This is the production profile
</div>

または、アクティブなプロファイル名をグローバル変数として設定できます。

@ControllerAdvice
public class BuildPropertiesController {

    @Autowired
    private Environment env;

    @ModelAttribute("profile")
    public String activeProfile() {
        return env.getActiveProfiles()[0];
    }
}

そして、${profile} thymeleafファイルの変数(アクティブなプロファイルが1つある場合):

<div>
     This is the <span th:text="${profile}"></span> profile
</div>
1
Igorock