spring - 如何使用 WebApplicationInitializer 配置 @EnableConfigurationProperties、@ConfigurationProperties?

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

我想使用

读取 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 不为空)。任何想法?我错过了什么?

最佳答案

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

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

似乎 spring boot 会自动为您完成。

关于spring - 如何使用 WebApplicationInitializer 配置 @EnableConfigurationProperties、@ConfigurationProperties?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29531930/

相关文章:

java - Hibernate 的旧版 org.hibernate.Criteria API 已弃用

java - 什么是相当于 tcp-outbound-gateway 的 java 配置?

spring-mvc - Spring MVC : read file from src/main/resources

java - 执行单个命令并退出 Spring Shell 2

java - 如何使用 Java 8 在 Spring boot 中获取目录(而不是文件)的完整系统路径

java - Spring Boot 2.0.3版中的分页功能不起作用

java - Spring转换器不转换自定义实体

java - 在 Spring Boot 中运行测试时不满足依赖关系

Spring MockMvcBuilders 安全过滤器

当 https 端口被 http 请求命中时,Spring boot 禁用响应