spring 如何使用 WebApplicationInitializer 配置@EnableConfigurationProperties、@ConfigurationProperties?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29531930/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to config @EnableConfigurationProperties, @ConfigurationProperties with WebApplicationInitializer?
提问by ItsHyman
I want to read application.properties using
我想阅读 application.properties 使用
@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:
现在我想替换为SpringBoot(Application.java)
,WebApplicationInitializer
以便我可以使用外部容器。这是我的代码:
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?
这样做之后,我无法在application.proerties
. 任何的想法?我错过了什么?
回答by ItsHyman
Problem solved. I am missing property file location!!
问题解决了。我缺少属性文件位置!
@ConfigurationProperties(prefix = "server", locations = "classpath:application.properties")
Seems spring boot does that for you automatically.
似乎 spring boot 会自动为你做这件事。