我是Spring Boot的新手,并阅读了有关@ConfigurationProperties注释如何在没有@Value注释的情况下自动注入字段值的内容。
@Configuration
@ConfigurationProperties(locations = "classpath:some.properties", prefix = "something")
public class MyConfiguration { .. }
我想使用Groovy的ConfigSlurper
来阅读我的属性配置。有没有办法将@ConfigurationProperties
与自定义属性阅读器关联,可能是Spring类的自定义扩展,它处理ConfigSlurper
?或者有没有办法用不同的功能模拟相同的行为?
答案 0 :(得分:4)
这不是@ConfigurationProperties
的意图。 @ConfigurationProperties
绑定Environment
中可用的任何内容。 locations
属性在1.4中已弃用,将在以后的版本中删除。
您的想法是指定一个前缀,如果它们是与环境中的前缀匹配的键,我们会在您的POJO中注入相关属性。如果您想要使用此机制的基础结构,请删除{{1} }注释的属性并使用您自己的属性源更新环境。另一个答案为您提供了一种方法,您可以使用locations
将您的实现挂钩到环境中。
答案 1 :(得分:3)
您可以通过实施自己的PropertySourceLoader
:
public class ConfigSlurperPropertySourceLoader implements PropertySourceLoader {
@Override
public String[] getFileExtensions() {
return new String[] { "groovy" };
}
@Override
public PropertySource<?> load(String name, Resource resource, String profile) throws IOException {
ConfigObject source = new ConfigSlurper(profile).parse(resource.getURL());
return new ConfigObjectPropertySource(name, source);
}
}
将PropertySource<T>
扩展为从ConfigObject
(上面的ConfigObjectPropertySource
)读取值。然后在META-INF/spring.factories
内注册:
# PropertySource Loaders
org.springframework.boot.env.PropertySourceLoader=\
org.example.ConfigSlurperPropertySourceLoader,\
org.springframework.boot.env.PropertiesPropertySourceLoader,\
org.springframework.boot.env.YamlPropertySourceLoader
spring-groovy-config
已经实现了它,并且可用on github。