作为 Spring Boot 项目的一部分,我尝试在创建 Spring ApplicationContext 之前读取 application.properties,如下所示:
主类
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ConfigurationClass con = new ConfigurationClass();
con.readProperties();
ApplicationContext c = SpringApplication.run(DemoApplication.class, args);
}
}
配置类,
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
@Configuration
@PropertySource("classpath:application.properties")
public class ConfigurationClass {
private String value1;
private String value2;
@Autowired
private Environment env;
public void readProperties() {
value1 = env.getProperty("app.value1");
value2 = env.getProperty("app.value2");
}
public String getValue1() {
return value1;
}
public String getValue2() {
return value2;
}
}
我想从应用程序属性中获取一些基本值并进行一些配置。此代码发生的情况是它会抛出nullpointerexception
,因为env
在value1 = env.getProperty("app.value1");
期间为 null。
我在这里做错了什么?
在创建 springapplication 上下文之前,如何在此时读取 application.properties 中的值?
任何帮助将不胜感激!
@Configuration
@PropertySource("classpath:application.properties")
public class ConfigurationClass {
@Value("${app.value1}")
private String value1;
@Value("${app.value2}")
private String value2;
public String getValue1() {
return value1;
}
public String getValue2() {
return value2;
}
}
然后调用它
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
ApplicationContext c = SpringApplication.run(DemoApplication.class, args);
ConfigurationClass con = c.getBean(ConfigurationClass.class);
System.out.println(con.getValue1());
System.out.println(con.getValue2());
}
}