美文网首页
SpringBoot 配置文件使用详解

SpringBoot 配置文件使用详解

作者: 小二上酒8 | 来源:发表于2022-09-16 13:17 被阅读0次

    一、创建一个SpringBoot项目#

    创建 SprintBoot 项目的 2 种方式:

    1. https://start.spring.io/ 上创建一个 SpringBoot 项目,然后导入到 IDEA 里。
    2. 直接在 IDEA 上创建 SpringBoot 项目, File->New->Project, Sprint Initializr,填上相关信息。

    我直接在 https://start.spring.io/ 生成一个项目然后下载下来,导入 IDEA 里。

    把下载的文件解压放在 SpringBootConfigDemos 文件夹下:

    二、配置文件类型#

    在上一小节的图中可以看到,在 src/main/resources 目录下的 application.properties 文件,这个就是创建的默认全局配置文件

    这是一种文件类型,以 .properties 后缀结尾。

    还有一种以 .yml 后缀结尾的 YAML 文件类型 - application.yml/application.yaml

    YAML 是比 properties 格式更年轻,在云原生里用的很多这种配置格式。

    三、配置文件语法格式#

    3.1 application.properties 类型#

    properties 在 java 里属于比较常见的配置文件类型,语法格式: key=valve 形式,

    Copy
    
    `key=value`
    

    用法例子:

    Copy
    
    `server.port = 80
    server.ip = 127.0.0.1
    
    app.property.key = proname
    app.property.name = tom
    app.list = 1,2,3
    
    # 还有这样语法
    # 把启动命令时加入: --spring.profiles.active=dev
    spring.profiles.active = ${spring.profiles.active} # 读取启动命令参数
    
    # 属性占位符:使用${var}语法引用已经定义的属性的值
    app.desc = your name is ${app.property.name}` 
    

    3.2 application.yml 类型#

    把上面 properties 格式改成 yml 格式:

    Copy
    
    `server:
      port: 80
      ip: 127.0.0.1
    
    app:
      property:
        key: proname
        name: tom
      list: [1,2,3]
      desc: your name is ${app.property.name}
    
    spring:
      profiles:
         active: ${spring.profiles.active}` 
    

    比如对于一个数组,可以这样写:

    Copy
    
    `person:
      hobby:
        - 篮球
        - 跑步
        - 读书` 
    

    还可以这样写:

    Copy
    
    `person:
      hobby: [篮球, 跑步, 读书]` 
    

    YAML 支持以下几种数据类型:

    • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
    • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
    • 纯量(scalars):单个的、不可再分的值

    YAML 入门教程:

    说明:YAML 格式是大小写敏感的。key: value 表示键值对关系,冒号后面必须加一个空格

    3.3 配置随机值#

    SpringBoot 内部提供了一个 random.* 属性,专门用于生成随机值。

    属性 描述
    random.int 随机产生正负的整数
    random.int(max) 随机产生 [0, max) 区间的整数
    random.int(min,max) 随机产生 [min, max) 区间的整数
    random.long 随机产生正负的长整数
    random.long(max) 随机产生 [0, max) 区间的长整数
    random.long(min,max) 随机产生 [min, max) 区间的长整数
    random.uuid 产生 UUID 字符串(含‘-‘字符)
    random.* ‘*’表示除上面列举之外的其他字符,用于随机产生 32 位字符串

    配置例子:

    Copy
    
    `int-val=${random.int}
    int-range-val=${random.int(2)}
    uuid-val=${random.uuid}`
    

    四、配置文件加载顺序#

    SpringBoot 启动时会加载以下位置的 application.properties 或者 application.yml 作为默认配置文件。

    1. file:./config/
    2. file:./config/*/
    3. file:./
    4. classpath:/config/
    5. classpath:/

    加载顺序依次从上到下,所有文件都会加载,高优先级的内容会覆盖低优先级的内容。

    五、其它形式配置#

    5.1 其它形式配置#

    其实上面已经有使用到,比如读取命令行参数信息到配置文件里。这里的命令行参数也是一种动态配置信息。

    其它常用配置形式:

    1. 系统环境变量:在 linux 中经常用到这个。
    2. 命令行参数:启动应用时常常会配置的运行参数。
    3. Java 系统属性:通过 System.getProperties() 获取的。
    4. 一些注解设置的属性文件,比如 @PropertySource 设置的属性文件
    5. 启动类 SpringApplication.setDefaultProperties 设置的默认属性

    5.2 加载顺序怎样#

    1. 命令行参数
    2. Java 系统属性
    3. 系统环境变量
    4. 含有 random.* 值的属性
    5. application-{profile}.{properties|yml}
    6. application.{properties|yml}
    7. 注解 @PropertySource 设置的属性文件
    8. 启动类 SpringApplication.setDefaultProperties 设置的默认属性

    加载顺序依次从上到下。

    六、配置信息作用#

    1. 数据库连接信息保存

    2. 项目的启动信息,比如 test,dev,prod 环境,端口信息等

    3. 一些自定义配置信息,比如文件上传地址,调用第三方 url 地址、uid、密匙信息等

    等等。

    七:读取配置文件#

    7.0 绑定配置的一些规则#

    SpringBoot 对 *.properties*.yml 文件中配置的属性名称,它提供了一些绑定规则,它不要求配置的属性名称完全与 Bean 中的属性名称相同。它支持以下几种规则的命名方式:

    属性 描述
    firstName 标准的驼峰式命名
    first-name 单词之间通过‘-‘分隔,Spring Boot 推荐这种
    first_name 单词之间通过‘_’分隔
    FIRST_NAME 单词全部大写并通过‘_’分隔,在使用系统环境变量时,推荐这种

    7.1 通过 @Value 注解读取#

    application.yml:

    Copy
    
    `server:
      port: 80
      ip:   127.0.0.1` 
    

    通过使用注解 @Value("${属性名称}") 来将配置文件里面的值注入到程序属性中。

    Copy
    
    `@Component
    public class ServerConfig {
    
        @Value("${server.port}")
        public String Port;
    
        @Value("${$server.ip}")
        public String IP;
    }`
    

    7.2 通过 @ConfigurationProperties 注解读取#

    7.2.1 @ConfigurationProperties 读取配置值#

    @ConfigurationProperties:将配置文件中的相关配置和类里面的属性进行绑定。

    它里面有一个参数,当然这个参数也可以不填,语法如下:

    Copy
    
    `@ConfigurationProperties(prefix = "xxx")` 
    

    上面的 application.yml 里值也可以用如下程序来读取:

    Copy
    
    `@Component
    @ConfigurationProperties(prefix = "server")
    public class ServerConfig {
    
        public String port;
    
        public String ip;
    }` 
    
    • 来一个比较复杂点例子:

    application.yml 文件:

    Copy
    
    `server:
      port: 80
      ip:   127.0.0.1
      list-server:
         - BJ-Server
         - GZ-Server
      map-server: {bj-server: 192.168.0.2, gz-server: 192.168.0.3}
      dns:
         bj: bj.dns.one
         gz: gz.dns.two
      arr-port: 8081, 8082` 
    

    读取配置文件:

    Copy
    
    `@Component
    @ConfigurationProperties(prefix = "server")
    public class ServerConfig {
    
        public String port;
        public String ip;
        private List<String> listServer;
        private Map<String, String> mapServer;
        private int[] arrPort;
    
        private Dns dns;
    
        public static class Dns {
            private String bj;
            private String gz;
        }
    }` 
    

    上面的也可以用 @Value 读取,程序跟前面例子一样。

    7.2.2 @Value 和 @ConfigurationProperties 区别#

    @ConfigurationProperties @Value
    功能 批量注入配置文件中的属性 一个个指定属性
    松散绑定 支持 不支持
    SPEL(计算式) 不支持 支持
    JSR303数据校验 支持 不支持
    复杂类型 支持 不支持

    7.3 @PropertySource 加载指定配置文件#

    @PropertySource("email-config.properties"),加载 email-config.properties 配置文件。

    同理也可以加载 .yml 的文件。

    email-config.properties:

    Copy
    
    `email.name = jimmy
    email.from = 123@test.com
    email.to = 567@yeah.com` 
    

    读取配置文件值:

    Copy
    
    `@Component
    @PropertySource("email-config.properties")
    @ConfigurationProperties(prefix = "email")
    public class EmailConfig {
        private String name;
        private String to;
        private String from;
    }`
    

    相关文章

      网友评论

          本文标题:SpringBoot 配置文件使用详解

          本文链接:https://www.haomeiwen.com/subject/klosortx.html