• Spring Boot的特性:外部化配置和配置随机值


    [

    24.外部化配置

    Spring Boot允许将配置外部化(externalize),这样你就能够在不同的环境下使用相同的代码。你可以使用properties文件,YAML文件,环境变量和命令行参数来外部化配置。使用@Value注解,可以直接将属性值注入到beans中,然后通过Spring的Environment抽象或通过@ConfigurationProperties绑定到结构化对象来访问。

    Spring Boot设计了一个非常特别的PropertySource顺序,以允许对属性值进行合理的覆盖,属性会以如下的顺序进行设值:

    1. home目录下的devtools全局设置属性(~/.spring-boot-devtools.properties,如果devtools激活)。
    2. 测试用例上的@TestPropertySource注解。
    3. 测试用例上的@SpringBootTest#properties注解。
    4. 命令行参数
    5. 来自SPRING_APPLICATION_JSON的属性(环境变量或系统属性中内嵌的内联JSON)。
    6. ServletConfig初始化参数。
    7. ServletContext初始化参数。
    8. 来自于java:comp/env的JNDI属性。
    9. Java系统属性(System.getProperties())。
    10. 操作系统环境变量。
    11. RandomValuePropertySource,只包含random.*中的属性。
    12. 没有打进jar包的Profile-specific应用属性(application-{profile}.properties和YAML变量)。
    13. 打进jar包中的Profile-specific应用属性(application-{profile}.properties和YAML变量)。
    14. 没有打进jar包的应用配置(application.properties和YAML变量)。
    15. 打进jar包中的应用配置(application.properties和YAML变量)。
    16. @Configuration类上的@PropertySource注解。
    17. 默认属性(使用SpringApplication.setDefaultProperties指定)。

    下面是具体的示例,假设你开发一个使用name属性的@Component:

    import org.springframework.stereotype.*
    import org.springframework.beans.factory.annotation.*
    
    @Component
    public class MyBean {
        @Value("${name}")
        private String name;
        // ...
    }
    

    你可以将一个application.properties放到应用的classpath下,为name提供一个合适的默认属性值。当在新的环境中运行时,可以在jar包外提供一个application.properties覆盖name属性。对于一次性的测试,你可以使用特定的命令行开关启动应用(比如,java -jar app.jar --name="Spring")。

    注 SPRING_APPLICATION_JSON属性可以通过命令行的环境变量设置,例如,在一个UNIX shell中可以这样:

    $ SPRING_APPLICATION_JSON='{"foo":{"bar":"spam"}}' java -jar myapp.jar
    

    本示例中,如果是Spring Environment,你可以以foo.bar=spam结尾;如果在一个系统变量中,可以提供作为spring.application.json的JSON字符串:

    $ java -Dspring.application.json='{"foo":"bar"}' -jar myapp.jar
    

    或命令行参数:

    $ java -jar myapp.jar --spring.application.json='{"foo":"bar"}'
    

    或作为一个JNDI变量java:comp/env/spring.application.json。

     

    24.1. 配置随机值

    在注入随机值(比如,密钥或测试用例)时RandomValuePropertySource很有用,它能产生整数,longs或字符串,比如:

    my.secret=${random.value}
    my.number=${random.int}
    my.bignumber=${random.long}
    my.number.less.than.ten=${random.int(10)}
    my.number.in.range=${random.int[1024,65536]}
    

    random.int*语法是OPEN value (,max) CLOSE,此处OPEN,CLOSE可以是任何字符,并且value,max是整数。如果提供max,那么value是最小值,max是最大值(不包含在内)。

     

    本文来自:Spring Boot的特性:外部化配置和配置随机值

    ]
    转载请保留页面地址:https://www.breakyizhan.com/springboot/3281.html
  • 相关阅读:
    ios awakeFromNib 和 initWithCoder:
    iOS 关于iphone6 和 iphone6 plus 的适配
    iOS 目录的使用
    iOS 8 WKWebView 知识点
    iOS 动画结束后 view的位置 待完善
    iOS coredata 数据库升级 时报Can't find model for source store
    iOS 真机文件系统区分大小写,而模拟器可能不区分
    iOS coredata 级联删除
    iOS 关于AFNetworking ssl 待完成
    iOS 关于UIWindow的理解
  • 原文地址:https://www.cnblogs.com/breakyizhan/p/13286210.html
Copyright © 2020-2023  润新知