Get spring application environment in thymeleaf
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>
Simply add this class which allows to set global variables for views:
@ControllerAdvice
public class BuildPropertiesController {
@Autowired
private Environment env;
@ModelAttribute("isProd")
public boolean isProd() {
return Arrays.asList(env.getActiveProfiles()).contains("production");
}
}
And then use ${isProd}
variable in your thymeleaf file:
<div th:if="${isProd}">
This is the production profile
</div>
Or you can set active profile name as a global variable:
@ControllerAdvice
public class BuildPropertiesController {
@Autowired
private Environment env;
@ModelAttribute("profile")
public String activeProfile() {
return env.getActiveProfiles()[0];
}
}
And then use ${profile}
variable in your thymeleaf file (if you have one active profile):
<div>
This is the <span th:text="${profile}"></span> profile
</div>