Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to config @EnableConfigurationProperties, @ConfigurationProperties with WebApplicationInitializer?

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?

like image 841
ItsJack Avatar asked Oct 23 '25 10:10

ItsJack


1 Answers

Problem solved. I am missing property file location!!

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

Seems spring boot does that for you automatically.

like image 97
ItsJack Avatar answered Oct 26 '25 01:10

ItsJack