我有使用一个宁静的api的spring boot客户端。不用在Java类中对REST API的IP地址进行硬编码,我可以使用application.properties中的任何键条目吗?
如果没有,我可以创建一个自定义条目吗?
谢谢
Spring Boot使用的基础架构可以完全相同的方式用于您自己的项目中。您在@zmitrok答案中评论了有关“未知属性”警告的信息。那是因为您的属性没有元数据,所以IDE对此一无所知。
我强烈建议您 不要 使用@Value,因为与Spring Boot提供的功能(@ValueSpring框架功能)相比,它受到了很大的限制。
@Value
首先为您的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
1.3.0.M3
@EnableConfigurationProperties(FooProperties.class)
完成后,app.foo.ip就application.properties可以@Autowired FooProperties在代码中使用它,并可以在代码中查找属性的值
app.foo.ip
application.properties
@Autowired
@Component public MyRestClient { private final FooProperties fooProperties; @Autowired public MyRestClient(FooProperties fooProperties) { ... } public callFoo() { String ip = this.fooProperties.getIp(); ... } }
好的,所以您的IDE中的密钥仍然是黄色的。最后一步是添加一个额外的依赖关系,该依赖关系将在构建时查找您的代码并生成相关的元数据。将以下内容添加到您的pom.xml中
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
而且,您的密钥被识别,您拥有javadoc,并且IDE为您提供了默认值(您在字段上初始化的值)。一旦可以使用任何类型,转换服务就会处理(即URL),并且字段上的javadoc用于生成密钥的文档。
URL
您还可以JSR-303在字段上添加任何约束验证(例如,使用正则表达式来检查其是否为有效ip)。
JSR-303
检查此示例项目和文档以获取更多详细信息。