私のSpring Bootアプリケーションは3つの構成で実行されます:
アプリケーションが実行されているthymeleaf環境に入るにはどうすればよいですか?
本番環境でのみGoogle Analyticsコードを含める必要があります。
一度にアクティブにできるプロファイルが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>
_
ビューのグローバル変数を設定できるこのクラスを追加するだけです:
@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>