我正在学习ApplicationContextInitializer。 我正在阅读如下所示的示例,该示例是webapp设置的一部分
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext>{
.....
.....
public void initialize(ConfigurableWebApplicationContext applicationContext) {
String homeKey = ((ConfigurableWebApplicationContext)applicationContext).getServletContext().getInitParameter("homekey");
.................
...............
相应的web.xml
...............
...............
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>com.xxx.config</param-value>
</context-param>
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.xxxx.MyApplicationContextInitializer</param-value>
</context-param>
<context-param>
<param-name>homekey</param-name>
<param-value>yyyyy</param-value>
</context-param>
.............
...............
我想在NON webapp应用程序中复制此行为,更多用于学习目的。
我修改了MyApplicationContextInitializer,如下所示
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext>{
................
......................
public void initialize(ConfigurableApplicationContext applicationContext) {
............
.............
我的问题是如何在没有web.xml的情况下获得“homekey”。我假设我可以使用系统属性或使用属性文件并调用方法applicationContext.getEnvironment()。getProperty或applicationContext.getResource()。如果没有系统属性或属性文件,我可以这样做吗? web.xml没有使用任何属性文件。
答案 0 :(得分:1)
如果您当前正在使用Spring Boot 2,并且想使用漂亮的强类型配置对象...
@Data // lombok for terseness (getters / setters)
@Configuration
@ConfigurationProperties(prefix = "my-config")
public class MyConfigProps {
private String homekey;
...
}
...针对您的application.yaml
文件中的属性...
my-config:
homekey: yyyyy
...
...并以编程方式在ApplicationContextInitializer
(在春季生命周期的早期出现)中检索属性类,则可以使用Binder
对象(请参见https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Migration-Guide),即/ p>
public class Initializer implements ApplicationContextInitializer<ConfigurableWebApplicationContext> {
@Override
public void initialize(ConfigurableWebApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
MyConfigProps configProps = Binder.get(environment).bind("my-config", MyConfigProps);
System.out.println(configProps.getHomekey());
}
}