Подтвердить что ты не робот

Получите прикладную среду spring в тимелеафе

My Spring Загрузочное приложение запускается с тремя конфигурациями:

  • application.properties → для среды разработки
  • application-test.properties → для тестовой среды
  • application-production.properties → для производственной среды

Как можно получить в среде тимелеафера приложение работает?

Мне нужно включить код Google Analytics только в производственную среду.

4b9b3361

Ответ 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>