0

В моем веб-приложении я создаю CustomWebApplicationInitializer, который простирается от AbstractAnnotationConfigDispatcherServletInitializer. Мне нужно добавить другой источник собственности для приложения. Я делаю это в методе onStartup, как показано ниже, устанавливая InitParameter в servletContext.Spring web Application Context

public class MvcWebApplicationInitializer extends 
     AbstractAnnotationConfigDispatcherServletInitializer { 
    private static final String[] SERVLET_MAPPINGS = new String[] {"/"}; 
    private static final String SESSION_COOKIE_PATH = "/"; 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[] {AppConfig.class}; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[] {WebConfig.class}; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return SERVLET_MAPPINGS; 
    } 


    @Override 
    public void onStartup(ServletContext servletContext) throws ServletException { 
     super.onStartup(servletContext); 
     servletContext.setInitParameter("contextInitializerClasses", "com.test.myproject.MyTestPropertySourceInitializer"); 
    } 
    } 

MyTestPropertySourceInitializer реализует ApplicationContextInitializer и проверяет, является ли значение некоторого свойства устанавливается истина.

public void initialize(ConfigurableApplicationContext applicationContext) { 
    ConfigurableEnvironment env = applicationContext.getEnvironment(); 
    Boolean testPropEnabled = (Boolean) env.getProperty("testProperty.enabled", Boolean.class); 

Я установил это значение свойства в true. Но в логах значение false, и оно не обрабатывается, как ожидалось. Поэтому я думаю, что к моменту вызова метода initialize файл свойства не загружается в applicationContext. Пожалуйста, сообщите, как я могу это сделать. Заранее спасибо.

ответ

0

попробовать, силой загрузить файл свойств

public void initialize(ConfigurableApplicationContext applicationContext) { 
    ConfigurableEnvironment env = applicationContext.getEnvironment(); 
    env.getPropertySources().addFirst(new ResourcePropertySource("classpath:application.properties")) 

    Boolean testPropEnabled = (Boolean) env.getProperty("testProperty.enabled", Boolean.class); 

} 
+0

Извините за путаницу описания. Метод инициализации находится в другой общей библиотеке, которая используется многими другими проектами, поэтому мы не можем выполнять эту нагрузку. Я попробую принудительно загрузить в моем проекте, прежде чем вызывать метод servinetcontext setInitParameter и сообщить вам, если это работает. – NewQueries