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