How to config @EnableConfigurationProperties, @ConfigurationProperties with WebApplicationInitializer?

23,017

Problem solved. I am missing property file location!!

@ConfigurationProperties(prefix = "server", locations = "classpath:application.properties")

Seems spring boot does that for you automatically.

Share:
23,017
ItsJack
Author by

ItsJack

Updated on August 07, 2020

Comments

  • ItsJack
    ItsJack almost 4 years

    I want to read application.properties using

    @EnableConfigurationProperties and @ConfigurationProperties.
    

    I am able to do that with the following codes:

    Application.java
    
    @SpringBootApplication
    @EnableConfigurationProperties(ApplicationConfiguration.class)
    public class Application {
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    }
    
    
    ApplicationConfiguration.java
    
    @ConfigurationProperties(prefix = "server")
    public class ApplicationConfiguration {
    
        private String port;
    
        public String getPort() {
            return port;
        }
    
        public void setPort(String port) {
            this.port = port;
        }
    }
    
    TestController.java
    
    @Controller
    public class TestController {
    
        @Autowired
        ApplicationConfiguration applicationConfiguration;
    
        @RequestMapping("/test")
        @ResponseBody
        public String test() {
            if (applicationConfiguration != null) {
                return applicationConfiguration.getPort();
            }
            return "1";
        }
    }
    
    application.properties
    
    server.port = 8085
    

    Now I want to replace SpringBoot(Application.java) with WebApplicationInitializer so that I can use an external container. Here is my code:

    CommonInitializer.java
    
    public class CommonInitializer implements WebApplicationInitializer{
        @Override
        public void onStartup(ServletContext servletContext) throws ServletException {
    
            AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext = new AnnotationConfigWebApplicationContext();
            annotationConfigWebApplicationContext.register(WebConfiguration.class);
            annotationConfigWebApplicationContext.setServletContext(servletContext);
    
            ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(annotationConfigWebApplicationContext));
    
            servlet.setLoadOnStartup(1);
            servlet.addMapping("/");
        }
    } 
    
    WebConfiguration.java
    
    @Configuration
    @EnableWebMvc
    @ComponentScan(basePackages = "hello")
    @EnableAutoConfiguration
    @EnableConfigurationProperties(ApplicationConfiguration.class)
    public class WebConfiguration {
    
        @Bean
        public ViewResolver viewResolver() {
            InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
            viewResolver.setViewClass(JstlView.class);
            viewResolver.setPrefix("/WEB-INF/views/");
            viewResolver.setSuffix(".jsp");
    
            return viewResolver;
        }
    }
    

    After doing this, I am not able to get the port(port is null, applicationConfiguration is not null) in application.proerties. Any idea? What am I missing?

  • Vikas
    Vikas about 7 years
  • Impulse The Fox
    Impulse The Fox about 6 years
    locations is removed in Spring 2.0.0
  • andy
    andy about 5 years
    This answer is much better and worked for me.