我试图使用组件来加载我的配置yml文件。
然而,它抛出一个空指针异常,System.out显示' null'申请。
但是,当使用相同的模式编写@RestController时,一切正常。为什么@component没有看到我的配置?
@Component
@ConfigurationProperties(prefix = "myconf")
public class AppConfigJSON {
private String application;
private final String applicationConfigJSON;
Logger logger = LoggerFactory.getLogger(this.getClass());
private final ReadContext acRcJson;
public AppConfigJSON(){
String json = "";
try {
System.out.println("Application: " + this.application);
json = IOUtils.toString(this.getClass().getResourceAsStream("/myconfs/"+this.application+".json"));
} catch (IOException e) {
logger.error("Error reading JSON or app YML {}", e.getStackTrace());
}
this.applicationConfigJSON = json;
this.acRcJson = JsonPath.parse(this.getApplicationConfigJSON());
}
// These functions below set by configuration
public String getApplication()
{
return application;
}
public void setApplication(String application)
{
this.application = application;
}
}
答案 0 :(得分:2)
在你的构造函数中,应用程序变量还没有被初始化,换句话说,Spring首先需要一个实例,所以它可以应用它的魔力。您需要将构造函数逻辑移动到使用@PostContruct
注释的方法,以便在该点使用属性值设置应用程序变量。