Spring启动 - Application.properties中的自定义变量

时间:2015-08-17 20:07:23

标签: spring spring-mvc spring-boot spring-data

我有一个使用restful api的spring boot客户端。而不是在java类中硬编码REST API的IP地址,我可以使用application.properties中的任何键入口吗?

如果没有,我可以创建自定义条目吗?

由于

3 个答案:

答案 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
}

然后你有两个选择

  1. @Component放在FooProperties上,并通过在@EnableConfigurationProperties类的任何一个上添加@Configuration来启用配置属性的处理(从Spring开始,不再需要这最后一步)引导1.3.0.M3
  2. 按原样保留FooProperties并将@EnableConfigurationProperties(FooProperties.class)添加到您将自动为您创建Spring Bean的任何@Configuration类中。
  3. 完成后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)。

    查看this sample projectthe documentation了解详情。

答案 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

中列出的常用属性冲突