【发布时间】:2018-12-10 00:19:08
【问题描述】:
我正在尝试从application.properties 读取一些属性。我创建了一个带有@Component 和@ConfigurationProperties 注释的配置类。
当我尝试从控制器类访问配置时,它工作正常。但是当我试图从一个组件类访问配置时,它会抛出一个空指针异常。
以下是application.properties 和类。
application.properties
elasticsearch.ip=localhost
InputManagementController.java
@RestController
public class InputManagementController {
@Autowired
private Configuration configuration;
@GetMapping("/crawler/start")
public String start(){
try{
System.out.println(configuration.getIp()); ----> getting value localhost
ElasticsearchInterface es=new ElasticsearchInterface();
es.getInputs();
}catch (Exception e){
e.printStackTrace();
}
return "started";
}
}
ElasticsearchInterface.java
@Component
public class ElasticsearchInterface {
@Autowired
private Configuration configuration;
public List<Map<String, Object>> getInputs() {
System.out.println(configuration.getIp()); ---> getting java.lang.NullPointerException here
return null;
}
}
配置.java
@Component
@ConfigurationProperties("elasticsearch")
public class Configuration {
private String ip;
private int port;
private String cluster;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
【问题讨论】:
-
在Configuration.java类@user之上使用Configuration注解代替Component注解
-
@Deadpool 仍然遇到同样的错误
-
它对我有用,这些类在同一个包中吗?还是不同?并检查这个依赖
org.springframework.boot spring-boot-configuration-processor true -
ElasticsearchInterface es=new ElasticsearchInterface();不行,你还要注入 ElasticsearchInterface,让它由 Spring 管理。 -
您做错了,您需要使用@Configuration 注解,以便您的类将在 Spring 上下文中自动创建。因为您没有使用 @Configuration 注释标记您的 Configuration 类,所以它不是作为 bean 创建的,并且您会得到空指针异常。此外,您应该使用 @Value 注释来定义要读取的属性。我已经通过下面的回答解释了如何正确执行此操作。
标签: spring-boot autowired spring-boot-actuator spring-boot-test spring-boot-maven-plugin