我有一个使用restful api的spring boot客户端。而不是在java类中硬编码REST API的IP地址,我可以使用application.properties中的任何键入口吗?
如果没有,我可以创建自定义条目吗?
由于
答案 0 :(得分:78)
Spring Boot使用的基础结构可以以完全相同的方式在您自己的项目中使用。您在@zmitrok中回答了有关“未知属性”警告的回答。这是因为您的属性没有元数据,因此IDE不知道它。
我强烈建议你不使用@Value
如果可以,因为它与Spring Boot提供的相比有限(@Value
是Spring Framework功能)。
首先为您的IP创建一些POJO:
@ConfigurationProperties("app.foo")
public class FooProperties {
/**
* IP of foo service used to blah.
*/
private String ip = 127.0.0.1;
// getter & setter
}
然后你有两个选择
@Component
放在FooProperties
上,并通过在@EnableConfigurationProperties
类的任何一个上添加@Configuration
来启用配置属性的处理(从Spring开始,不再需要这最后一步)引导1.3.0.M3
)FooProperties
并将@EnableConfigurationProperties(FooProperties.class)
添加到您将自动为您创建Spring Bean的任何@Configuration
类中。 完成后app.foo.ip
可以在application.properties
中使用,您可以在代码中@Autowired
FooProperties
查找属性的值
@Component
public MyRestClient {
private final FooProperties fooProperties;
@Autowired
public MyRestClient(FooProperties fooProperties) { ... }
public callFoo() {
String ip = this.fooProperties.getIp();
...
}
}
好的,你的IDE中的密钥仍然是黄色的。最后一步是add an extra dependency that will look your code and generate the relevant meta-data at build time。将以下内容添加到您的pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
瞧,您的密钥已被识别,您有javadoc,IDE会为您提供默认值(您在该字段上初始化的值)。完成后,您可以使用转换服务处理的任何类型(即URL
),字段上的javadoc用于生成密钥的文档。
您还可以在字段上添加任何JSR-303
约束验证(例如正则表达式,以检查它是否为有效的IP)。
答案 1 :(得分:14)
您可以使用
启动应用程序,而不是将IP硬编码到属性文件中 -Dmy.property=127.127.10.20
Spring Boot会自动选择
@Value("${my.property}")
private String myProperty;
答案 2 :(得分:3)
您可以将自己的条目添加到application.properties。只需确保属性名称不会与http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties
中列出的常用属性冲突