Java 在spring boot应用程序中使用@Configuration访问配置
我正在创建一个自定义反序列化器类,它需要在我的Spring Boot应用程序中读取一些自定义配置。我的班级看起来有点像这样:Java 在spring boot应用程序中使用@Configuration访问配置,java,spring,spring-boot,Java,Spring,Spring Boot,我正在创建一个自定义反序列化器类,它需要在我的Spring Boot应用程序中读取一些自定义配置。我的班级看起来有点像这样: @配置 公共类ItemDeserializer扩展StdDeserializer{ @值(“${config.name}”) 私有字符串nameConfig; 公共项反序列化程序(){ 这个(空); } 公共项反序列化程序(类vc){ 超级(vc); } @凌驾 公共项反序列化(JsonParser jp,反序列化上下文ctxt) 抛出IOException、JsonP
@配置
公共类ItemDeserializer扩展StdDeserializer{
@值(“${config.name}”)
私有字符串nameConfig;
公共项反序列化程序(){
这个(空);
}
公共项反序列化程序(类vc){
超级(vc);
}
@凌驾
公共项反序列化(JsonParser jp,反序列化上下文ctxt)
抛出IOException、JsonProcessingException{
JsonNode节点=jp.getCodec().readTree(jp);
//基于配置值读入项目名称
String itemName=node.get(nameConfig.asText();
返回新项目(itemName);
}
}
我在Item类上调用它,如下所示:
@JsonDeserialize(使用=ItemDeserializer.class)
公共类项目{
私有字符串itemName;
//接球手和接球手
}
nameConfig
字段从未设置适当的配置值。添加@Configuration可以在我的应用程序的其他部分工作,但这些类包括@Bean注释和其他我认为必要的东西。如何对该类进行注释以使其工作?@Configuration表示一个类声明了一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些Bean生成Bean定义和服务请求
你不能这样使用它,你需要另一种策略。我建议阅读此链接:如果您使用的是SpringFramework 2.5+,那么解决方案是
SpringBeanAutowiringSupport
public class ItemDeserializer extends StdDeserializer<Item> {
@Value("${config.name}")
private String nameConfig;
public ItemDeserializer() {
this(null);
}
public ItemDeserializer(Class<?> vc) {
super(vc);
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@Override
public Item deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
//read in item name based on configuration value
String itemName = node.get(nameConfig).asText();
return new Item(itemName);
}
}
公共类ItemDeserializer扩展StdDeserializer{
@值(“${config.name}”)
私有字符串nameConfig;
公共项反序列化程序(){
这个(空);
}
公共项反序列化程序(类vc){
超级(vc);
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
}
@凌驾
公共项反序列化(JsonParser jp,反序列化上下文ctxt)
抛出IOException、JsonProcessingException{
JsonNode节点=jp.getCodec().readTree(jp);
//基于配置值读入项目名称
String itemName=node.get(nameConfig.asText();
返回新项目(itemName);
}
}
你所说的“在我的应用程序的其他部分工作”是什么意思。请您澄清一下您面临的问题好吗?@M.Mas。我把我的问题扩大了一点。当我说它在我的应用程序的其他部分工作时,我是说我在我的应用程序的其他部分成功地获得了配置,就像我在这门课上一样。。。用配置注释它,用值获取值。你是说通过添加@Configuration,问题就解决了。您可以添加代码或您遇到问题的用例吗?thanks@M.Mas. 以上代码就是问题所在。它不起作用。nameConfig的值始终为null,即使它在我的配置文件中设置。您说过“nameConfig的值始终为null,即使它在我的配置文件中设置”。。。。如果您打印应用程序的环境,例如loalhost:8080/exactor/env,您是否看到“config.name”的值?它在yur配置道具文件中..谢谢!实际上,我使用的是一个较旧版本的Spring,但我可能会升级以利用此功能。我感谢你的帮助。