Get spring application environment in thymeleaf

后端 未结 2 1465
暖寄归人
暖寄归人 2021-01-31 09:05

My Spring Boot application runs with 3 configurations:

  • application.properties --> for development environment
  • application-test.properties --> for test env
相关标签:
2条回答
  • 2021-01-31 09:38

    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>
    
    0 讨论(0)
  • 2021-01-31 09:41

    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>
    
    0 讨论(0)
提交回复
热议问题