【问题标题】:How to config @EnableConfigurationProperties, @ConfigurationProperties with WebApplicationInitializer?如何使用 WebApplicationInitializer 配置 @EnableConfigurationProperties、@ConfigurationProperties?
【发布时间】:2015-06-14 10:20:51
【问题描述】:

我想阅读 application.properties 使用

@EnableConfigurationProperties and @ConfigurationProperties.

我可以使用以下代码做到这一点:

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

现在我想用WebApplicationInitializer 替换SpringBoot(Application.java),这样我就可以使用外部容器了。这是我的代码:

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;
    }
}

执行此操作后,我无法在application.proerties 中获取端口(端口为空,applicationConfiguration 不为空)。任何想法?我错过了什么?

【问题讨论】:

  • 要部署到外部容器,只需按照参考指南中的说明扩展 SpringBootServletInitializer
  • 为什么使用 WebApplicationInitializer?您正在构建项目 spring

标签: spring spring-mvc spring-boot spring-java-config


【解决方案1】:

问题解决了。我缺少属性文件位置!!

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

似乎 spring boot 会自动为您执行此操作。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-09-27
  • 1970-01-01
  • 2020-08-05
  • 2019-06-03
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多