我有以下yaml属性文件:
myPrefix:
value: Hello
myPrefix2:
value: World
还有两个班级
@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix")
@Component
@Getter
@Setter
public class ViewUsers {
private String value;
}
和
@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix2")
@Component
@Getter
@Setter
public class ManageUsers {
private String value;
}
然后 null 被注入。 或者,如果我尝试使用@Value,则仅检索最新的值,这是最后一个(世界),始终忽略前面的值。
答案 0 :(得分:2)
尝试以下方法:
@Component
和ViewUsers
)中删除ManageUsers
@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix")
public class ViewUsers {
private String value; // getter, setter
}
@PropertySource("classpath:permission-config.yml")
@ConfigurationProperties(prefix = "myPrefix2")
public class ManageUsers {
private String value; // getter, setter
}
@Configuration
@EnableConfigurationProperties({ViewUsers.class, ManageUsers.class}
public class MySampleConfiguration {
... beans here...
}
还要确保Lombok注释能够按预期工作(尝试仅在POC中使用不带Lombok的注释)。
更新1
为@M。 Deinum友好地表示,像这样的PropertySource不适用于yaml文件。
您可以尝试以下解决方法:
@Configuration
@PropertySource(name = "someName", value = "classpath:foo.yaml", factory = YamlPropertySourceFactory.class)
public class MyConfig {
}
import org.springframework.boot.env.YamlPropertySourceLoader;
public class YamlPropertySourceFactory implements PropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
final List<PropertySource<?>> load = new YamlPropertySourceLoader().load(name, resource.getResource());
return load.get(0);
}
}