@ConfigurationProperties("app.foo")
public class FooProperties {
/**
* IP of foo service used to blah.
*/
private String ip = 127.0.0.1;
// getter & setter
}
@Component
public MyRestClient {
private final FooProperties fooProperties;
@Autowired
public MyRestClient(FooProperties fooProperties) { ... }
public callFoo() {
String ip = this.fooProperties.getIp();
...
}
}
4条答案
按热度按时间mqkwyuun1#
Sping Boot 使用的基础架构可以以完全相同的方式在您自己的项目中使用。您在@zmitrok回答中评论了“unknown property”警告。这是因为您的属性没有元数据,所以IDE不知道它。
我强烈建议你不要使用
@Value
,如果可以的话,因为它与Sping Boot 提供的功能相比相当有限(@Value
是Spring Framework的一个功能)。首先为您的IP创建一些POJO:
字符串
那你有两个选择
1.将
@Component
放在FooProperties
上,并通过在任何@Configuration
类上添加@EnableConfigurationProperties
来启用配置属性的处理(从Sping Boot1.3.0.M3
开始,最后一步不再需要)1.保持
FooProperties
不变,并将@EnableConfigurationProperties(FooProperties.class)
添加到任何@Configuration
类中,这将自动为您创建Spring Bean。一旦你完成了,
app.foo.ip
可以在application.properties
中使用,你可以在代码中@Autowired
FooProperties
来查找属性的值型
好了,您的密钥在IDE中仍然是黄色的。最后一步是添加一个额外的依赖项,它将在构建时查看您的代码并生成相关的元数据。
型
瞧,你的键被识别了,你有了javadoc,IDE给了你默认值(你在字段上初始化的值)。一旦你有了,你就可以使用转换服务处理的任何类型(即
URL
),字段上的javadoc用于为你的键生成文档。您还可以在字段上添加任何
JSR-303
约束验证(例如,正则表达式检查它是否是有效的ip)。查看this sample project和文档以了解更多详细信息。
7vhp5slm2#
与将IP硬编码到属性文件中不同,您可以使用
第一个月
Sping Boot 将自动拾取它,
字符串
btxsgosb3#
您可以将自己的条目添加到application.properties中。只要确保属性名称与http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties上列出的公共属性不冲突即可
pw136qt24#
我也面临着同样的问题。因为所有的答案都是2015年的,我试图更新这个主题。
让我们假设,下面是application.yml中的自定义属性:
字符串
你可能会得到警告
无法解析配置属性“custom.client”
要解决这个问题,您可能需要在 resources/META-INF 中创建文件 additional-spring-configuration-metadata.json。完成后,将以下内容添加到创建的文件中:
型
警告应该消失了。