Получите прикладную среду spring в тимелеафе
My Spring Загрузочное приложение запускается с тремя конфигурациями:
- application.properties → для среды разработки
- application-test.properties → для тестовой среды
- application-production.properties → для производственной среды
Как можно получить в среде тимелеафера приложение работает?
Мне нужно включить код Google Analytics только в производственную среду.
Ответы
Ответ 1
Вы можете сделать следующее, если у вас только один профиль активен за раз.
<div th:if="${@environment.getActiveProfiles()[0] == 'production'}">
This is the production profile - do whatever you want in here
</div>
Приведенный выше код основан на том, что диалект Тимелеафа Spring позволяет вам получить доступ к beans с помощью символа @
. И, конечно, объект Environment
всегда доступен как Spring bean.
Также обратите внимание, что Environment
имеет метод getActiveProfiles()
, который возвращает массив строк (поэтому в моем ответе используется [0]
), который мы можем вызвать с помощью стандартного Spring EL.
Если одновременно работает несколько профилей, более надежным решением будет использование служебного объекта Thymeleaf #arrays
, чтобы проверить наличие строки production
в активных профилях. Код в этом случае будет:
<div th:if="${#arrays.contains(@environment.getActiveProfiles(),'production')}">
This is the production profile
</div>
Ответ 2
Просто добавьте этот класс, который позволяет устанавливать глобальные переменные для представлений:
@ControllerAdvice
public class BuildPropertiesController {
@Autowired
private Environment env;
@ModelAttribute("isProd")
public boolean isProd() {
return Arrays.asList(env.getActiveProfiles()).contains("production");
}
}
А затем используйте переменную ${isProd}
в своем файле тимелист:
<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}
в вашем файле тимилиста (если у вас есть один активный профиль):
<div>
This is the <span th:text="${profile}"></span> profile
</div>