spring Sping Boot -Application.properties中的自定义变量

um6iljoc  于 5个月前  发布在  Spring
关注(0)|答案(4)|浏览(73)

我有一个Sping Boot 客户端,它使用了一个REST风格的API。除了在java类中硬编码REST API的IP地址,在application.properties中有没有可以使用的键条目?
如果没有,我可以创建一个自定义条目吗?
谢谢

mqkwyuun

mqkwyuun1#

Sping Boot 使用的基础架构可以以完全相同的方式在您自己的项目中使用。您在@zmitrok回答中评论了“unknown property”警告。这是因为您的属性没有元数据,所以IDE不知道它。
我强烈建议你不要使用@Value,如果可以的话,因为它与Sping 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
}

字符串
那你有两个选择
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
public MyRestClient {

    private final FooProperties fooProperties;

    @Autowired
    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>


瞧,你的键被识别了,你有了javadoc,IDE给了你默认值(你在字段上初始化的值)。一旦你有了,你就可以使用转换服务处理的任何类型(即URL),字段上的javadoc用于为你的键生成文档。
您还可以在字段上添加任何JSR-303约束验证(例如,正则表达式检查它是否是有效的ip)。
查看this sample project和文档以了解更多详细信息。

7vhp5slm

7vhp5slm2#

与将IP硬编码到属性文件中不同,您可以使用
第一个月
Sping Boot 将自动拾取它,

@Value("${my.property}")
private String myProperty;

字符串

btxsgosb

btxsgosb3#

您可以将自己的条目添加到application.properties中。只要确保属性名称与http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#common-application-properties上列出的公共属性不冲突即可

pw136qt2

pw136qt24#

我也面临着同样的问题。因为所有的答案都是2015年的,我试图更新这个主题。
让我们假设,下面是application.yml中的自定义属性:

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."
  }
] }


警告应该消失了。

相关问题