开发者

SpringBoot配置文件之properties和yml的使用

开发者 https://www.devze.com 2025-05-08 11:14 出处:网络 作者: 棕豆兔&
目录一、配置文件的作用二、配置文件的格式三、properties 配置文件说明3.1 properties 基本语法3.2 读取配置文件四、yml 配置文件说明4.1 yml基本语法4.2 yml 读取文件4.3 yml使用进阶4.3.1 配置对象4.3.2 配置集合
目录
  • 一、配置文件的作用
  • 二、配置文件的格式
  • 三、properties 配置文件说明
    • 3.1 properties 基本语法
    • 3.2 读取配置文件
  • 四、yml 配置文件说明
    • 4.1 yml基本语法
    • 4.2 yml 读取文件
    • 4.3 yml使用进阶
      • 4.3.1 配置对象
      • 4.3.2 配置集合
      • 4.3.3 配置Map
  • 总结

    一、配VhqwuNhC置文件的作用

    配置文件主要是为了解决硬编码带来的问题, 把可能会发生改变的信息,放在一个集中的地方, 当我们启动某个程序时, 应用程序从配置文件中读取数据, 并加载运行。

    使用配置文件, 可以使程序完成用户和应用程序的交互, 或者应用程序与其他应用程序的交互。

    SpringBoot支持并定义了配置文件的格式,也在另一个层面达到了规范其他框架集成到SpringBoot的目的。很多项目或者框架的配置信息也放在配置文件中, 比如:

    • 项目的启动端口;
    • 数据库的连接信息(包含用户名和密码的设置);
    • 第三方系统的调用密钥等信息;
    • 用于发现和定位问题的普通日志和异常日志等。

    二、配置文件的格式

    Spring Boot 配置文件有以下三种:

    • application.properties
    • application.yml
    • application.yaml

    yml 为yaml的简写, 实际开发中出现频率最高。yaml 和yml 的使用方式一样。

    NOTE:

    • 理论上讲 .properties 和 .yml 可以并存在于一个项目中,当 .properties 和 .yml 并存时,两个配置都会加载。如果配置文件内容有冲突,则以 .properties 为主,也就是 .properties 优先级更高;
    • 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,通常会采取一种统一的配置文件格式,这样可以更好的维护(降低故障率)。

    三、properties 配置文件说明

    properties 配置文件是最早期的配置文件格式,也是创建 SpringBoot 项目默认的配置文件。

    3.1 properties 基本语法

    properties 是以键值的形式配置的,key 和 value 之间是以 "=" 连接的,如:

    # 配置项⽬端⼝号
    server.port=8080
    #配置数据库连接信息
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
    characterEncoding=utf8&useSSL=false
    spring.datasource.username=root
    spring.datasource.passwowww.devze.comrd=root

    3.2 读取配置文件

    如果在项目中,想要主动的读取配置文件中的内容,可以使用 @Value 注解来实现。 @Value 注解使用" ${} "的格式读取,如下代码所示:

    properties 配置如下:

    mykey.key1 = bite
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class PropertiesController {
        @Value("${mykey.key1}")
        private Sthttp://www.devze.comring key1;
    
        @RequestMapping("/key")
        public String key(){
          return "读取到值:"+key1;
     }
    }

    四、yml 配置文件说明

    yml 是 YAML 是缩写,它的全称 Yet Another Markup Language ,翻译就是 “另一种标记语言“。

    4.1 yml基本语法

    yml 是树形结构的配置文件,它的基础语法是"key: value"。key 和 value 之间使用英文冒号加空格的方式组成, 空格不可省略

    基础语法举例如下:

    spring:
     datasource:
      url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8&useSSL=false
      username: root
      password: root

    4.2 yml 读取文件

    yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:

    yml配置:

    string:
     hello: bite
    @RestController
    public class ReadYml {
      @Value("${string.hello}")
      private String hello;
    
      @RequestMapping("/ymlKey")
      public String key(){
         return "读取到值:"+hello;
      }
    }

    NOTE: value值加单双引号

    • 字符串默认不用加上单引号或者双引号,如果加英文的单双引号可以表示特殊的含义。
    • 单引号会转义特殊字符,使其失去特殊功能,始终是一个普通的字符串;如 \n
    • 双引号不会转义字符串里面的特殊字符, 特殊字符会表示本身的含义。

    yml配置不同数据类型及null:

    #以下格式不代表yml文件格式,只是作为说明
    
    # 字符串
    string.value: Hello
      
    # 布尔值,true或false
    boolean.value: true
    boolean.value1: false
    
    # 整数
    int.value: 10
    
    # 浮点数
    float.value: 3.14159
    
    # Null,~代表null
    null.value: ~
    
    # "" 空字符串
    # 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表示是使⽤引号括起来
    empty.value: ''

    4.3 yml使用进阶

    4.3.1 配置对象

    在yml文件中配置对象,如下所示:

    student:
     id: 1
     name: Java
     age: 18
    
    
    #或者可以采用行内写法
    student: {id: 1,name: Java,age: 18}

    这个时候就不能用 android@Value 来读取配置中的对象了,此时要使用另一个注解@ConfigurationProperties 来读取,具体实现如下:

    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    @ConfigurationProperties(prefix = "student")
    @Component
    @Data
    public class Student {
     private int id;
     private String name;
     private int age;
    }

    调用类实现如下:

    @RestController
    public class StudentController {
    
     @Autowired
     private Student student;
     
     @RequestMapping("/readStudent")
     public String readStudent(){
         return student.toString();
     }
    }

    4.3.2 配置集合

    配置文件也可以配置 list 集合,如下所示:

    dbtypes:
     name:
      - mysql
      - sqlserver
      - DB2

    集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

    @Component
    @ConfigurationProperties("dbtypes")
    @Data
    public class ListConfig {
      private List<String> name;
    }

    访问集合的实现如下:

    @RestController
    public class ReadYml2 {
    
     @Autowired
     private ListConfig listConfig;
    
     @RequestMapping("/readList")
     public String readList(){
        return listConfig.toString();
     }
    }

    4.3.3 配置Map

    配置文件也可以配置 Map,如下所示:

    maptypes:
     map:
      k1: kk1编程客栈
      k2: kk2
      k3: kk3

    Map的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

    @Component
    @ConfigurationProperties("maptypes")
    @Data
    public class MapConfig {
     private HashMap<String,String> map;
    }

    打印类的实现如下:

    @RestController
    public class ReadYml2 {
    
     @Autowired
     private MapConfig mapConfig;
    
     @RequestMapping("/readMap")
     public String readStudent(){
       return mapConfig.toString();
     }
    }

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号