Get spring application environment in thymeleaf

environment, spring, spring-boot, thymeleaf

Solution

You can do the following if you only have one profile active at a time.

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

The code above is based on the fact that the Thymeleaf's Spring dialect lets you access beans using the `@` symbol. And of course the `Environment` object is always available as a Spring bean.

Also note that `Environment` has the method `getActiveProfiles()` which returns an array of Strings (that is why `[0]` is used in my answer) which we can call using standard Spring EL.

If more than one profiles are active at a time, a more robust solution would be to use Thymeleaf's `#arrays` utility object in order to check for the presence of the string `production` in the active profiles. The code in that case would be:

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

Problem

My Spring Boot application runs with 3 configurations: - application.properties --> for development environment - application-test.properties --> for test environment - application-production.properties --> for production environment How is it possible to get in thymeleaf environment the application is running? I need to include the Google Analytics code only in production environment.

Original source