我得到
读取YAML文件时出现com.fasterxml.jackson.databind.exc.InvalidDefinitionException:无法构造
com.ykb.frd.fraudcore.configuration.DatabaseConfiguration
的实例,问题:空
异常。然后应用程序会反复尝试,直到由于Stack Overflow异常而崩溃
YAML文件:
db:
url: blablablaurl
user: blabla
password: blabla
Java:
@JsonIgnoreProperties(ignoreUnknown = true)
public class DatabaseConfiguration {
private Database db;
private static DatabaseConfiguration single_instance = null;
private DatabaseConfiguration() {
db = readYml();
}
public static DatabaseConfiguration getInstance() {
if (single_instance == null)
single_instance = new DatabaseConfiguration();
return single_instance;
}
private final String YML_PATH = //path;
public Database getDb() {
return db;
}
/**
* Read from application.yml
* @return Database object
*/
private Database readYml(){
ObjectMapper mapper = new ObjectMapper(new YAMLFactory());
try {
return mapper.readValue(new File(YML_PATH), DatabaseConfiguration.class).getDb();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
在readYml()
函数内部,无限循环发生在mapper.readValue
的顶部。我猜想它与单例对象有关,但我不确定。
调用数据库配置:
private DatabaseConfiguration database = DatabaseConfiguration.getInstance();
谢谢。
答案 0 :(得分:2)
该类不能是单例。杰克逊需要一个公共的默认构造函数。您应该使用其他类(实际上是DTO)对YAML进行反序列化,然后将该对象传递给您的单例。
顺便说一下,singleton is an antipattern。