2015-05-19 2 views
1

Я пытаюсь построить свой проект с использованием профилей сборки (dev, test или prod). У меня есть весеннее веб-приложение, которое я инициализирую, используя мою реализацию WebApplicationInitializer.Gradle Inject Build Environment в WebApplicationInitializer

public class WebMvcInitializer implements WebApplicationInitializer { 

    public void onStartup(ServletContext servletContext) { 
     configureSpringDispacher(servletContext); 
     configureLogging(servletContext); 
    } 

    public void configureSpringDispacher(ServletContext container) { 
     AnnotationConfigWebApplicationContext context = AnnotationConfigWebApplicationContext(); 
     context.register(WebMvcConfigurer.class); 
     ServletRegistration.Dynamic dispacher = container.addServlet("dispatcher", new DispatcherServlet(context)); 
     dispacher.setLoadOnStartup(1); 
     dispacher.addMapping("/"); 
    } 

    private void configureLogging(ServletContext servletContext) { 
     servletContext.setInitParameter("log4jConfigLocation" , "file:/${env}-log4j.properties"); 
     Log4jConfigListener log4jListener = new Log4jConfigListener(); 
     servletContext.addListener(log4jListener); 
    } 
} 

Там, я пытаюсь настроить регистратор (log4j), используя $ {окр}, который я хочу заменить dev-log4j.properties или prod-log4j.properties, в зависимости от того, как я строю свой проект.

В моей build.gradle, у меня есть:

processResources { 
    from('src/main/java') { 
     filter ReplaceTokens, tokens:[ 
      "env": project.getProperty('env') 
     ] 
    } 
} 

Наконец, я строить proeject с помощью:

Gradle чистой сборки -Penv = Prod

Мой заполнитель $ {ENV} не заменяется. Если я пытаюсь выполнить фильтрацию в файлах xml или properties, это отлично работает. Я понимаю, что регистрация не может быть самым важным свойством для настройки, но я могу также использовать аналогичный подход для регистрации настройки Spring Spring.

Любая помощь на это оценивается.

Спасибо.

+1

Возможно, это не ответ на ваш вопрос, но посмотрите на [Весенние профили] (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html). Использование Gradle для обработки и замены не очень хорошо. – alexvetter

+0

Фильтрующие источники - определенно не очень хорошая идея. Поскольку @alexvetter предложил использовать пружинные профили или ресурсы фильтра. – Opal

+0

Спасибо за одобрение. Я отбросил идею фильтрации источников. Я никогда не использовал Spring Profiles, но кажется, что это аккуратная функция. – RadoTonev

ответ

0

Я закончил фильтрацию файла spring.properties, а затем прочитал это из моего WebApplicationInitializer, чтобы активировать профиль Spring.

Это, по-видимому, лучшее решение, чем попытка фильтровать источники.