开发者

SpringBoot如何配置文件properties和yml

开发者 https://www.devze.com 2024-08-24 10:22 出处:网络 作者: Salute-Y
目录配置文件的作用SprintBoot的配置文件(两种)propertiesyml读取配置文件的方法:@Value注解读取单个配置项@ConfigurationProperties读取实体类1.将配置文件中的一组对象映射到实体类上:2.使用注入的方式将对象注
目录
  • 配置文件的作用
  • SprintBoot的配置文件(两种)
    • properties
    • yml
  • 读取配置文件的方法:
    • @Value注解读取单个配置项
    • @ConfigurationProperties读取实体类
      • 1.将配置文件中的一组对象映射到实体类上:
      • 2.使用注入的方式将对象注入到一个类中
  • properties VS yml 总结

    配置文件的作用

    通常情况下,一个项目中的一些重要信息都会放在配置文件中

    比如:数据库的连接信息、项目的启动端口、一些第三方的秘钥、记录信息的普通日志和异常日志等。

    SprintBoot的配置文件(两种)

    Spring Boot的配置文件主要有两种格式:

    .properties和.yml

    SpringBoot如何配置文件properties和yml

    这两种格式的配置文件可以共同存在于一个项目中,但一般情况下我们会统一格式,只使用其中的一种,来降低故障率。

    .properties是最早期的SpringBoot配置文件的格式,也是现在默认的配置文件www.devze.com格式,出现的时间早于.yml。

    当这两个配置文件中出现相同的配置时,会优先执行.properties中的配置,然后再执行.yml中的配置,即.properties的优先级大于.yml

    properties

    创建SpringBoot项目后会自动生成一个配置文件,在该文件中,信息以键值对的形式进行储存。

    # 配置项目的信息
    # key=value
     server.port=8080
     spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?
     characterEncoding=utf8
     spring.datasource.username=root
     spring.datasource.password=root

    如果我们想要在这个文件中配置一些信息,可以在遵循key-va编程lue格式下,可以定义任意名称的key

    缺点:

    对于同一个对象的多个属性进行设置时很麻烦,需要多次重复,存在冗余配置项。

    如下,当我们想要设置同一个对象很多的信息时,需要多次重复这个信息:

    SpringBoot如何配置文件properties和yml

    而yml就很好的解决了这个问题。

    yml

    yml是YMAL的缩写,全称是 Yet Another Markup Language另一种标记语言

    YMAL是一个可读性高、易于理解、用来表达数据序列化的格式。

    YMAL的作用是可以做到跨语言使用,不仅Java中可以使用,Go和python中都可以使用。

    1.语法格式:

    • key: value表示键值对关系,冒号后面必须加一个空格
    • 大小写敏感
    • 缩进时不允许使用tab键,只能用空格
    • 左对齐的一列数据就表示同一级
    • 松散表示,java使用驼峰命名,而用原名或者-代替都可以正确映射,比如java中的名称是lastName,yml中使用lastName或者last-name都可以映射到。

    2.键值关系

    #  通常写法:
     student: 
          id: 1
          name: 张三
          age: 20
    
    
    # 行内写法
     student: { id: 1,name: 张三, age: 20}
     

    yml中,字符串默认不需要加上单引号或者双引号

    • 使用双引号:不会转义字符串中的特殊字符,特殊字符会作为本身想要表达的意思:比如 name: “zhangsan \n 23”,会输出:zhangsan 换行 23
    • 使用单引号:会转义特殊字符,特殊字符失去特殊作用变成普通字符。

    在配置文件中,它是以键值对的形式储存信息的,如果是自己配置的信息,你可以在遵循key-value的格式下,定义任何名称的key.

    使用YML连接数据库:

    sping:
      datasource:
        url:jdbc: mysql://127.0.0.0:3306/dbname?characterEncoding=tuf8
        username: root
        password: root

    表示常用的字面量:

    # 普通字面量
    name: zhangsan
    age: 18
    
    #布尔类型
    flag: true
    
    #日期
    date: 2022/04/15
    
    # 同一个对象的多个属性
    people:
          name: lisi
          age: 20
    # 数组
    # 用 -表示数组中的一个元素
    pets:
       - cat
       - dog
       - pig
    # 行内写法
    petss: [dog,cat,pig]
    
    # list对象、set对象、数组对象
    students:
          - name: zhangsan
            age: 22
          - name: lisi
            age: 20
          - {name: wangwu,age: 18}
          

    读取配置文件的方法:

    @Value注解读取单个配置项

    如果我们想要主动的读取配置文件中的信息,可以使用注解@Value。

    使用格式:

     @Value("${server.port}")
       private String port;

    在属性前加上@Value注解,后面的括号写入要读取的配置中哪个key,比如读取下面的server.port,注意格式:双引号+${}

    # 配置项目端口
     server.port=8080

    在测试类中得到这个值并进行打印:

    package com.example.demo;
    
    import Controller.TestReadYml;
    import org.springframework.beans.factory.InitializingBean;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    public class DemoApplication implements InitializingBean {
    
    
        @Value("${server.port}")
        private String port;
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class,args);
        }
    
        @Override
        public void afterPropertiesSet() throws Exception {
            System.out.println("  ");
            System.out.println("读取到信息:"+port);
            System.out.println("  ");
        }
    }

    输入:

    SpringBoot如何配置文件properties和yml

    @ConfigurationProperties读取实体类

    1.将配置文件中的一组对象映射到实体类上:

    使用格式:

    @Component //spring 启动时直接将配置文件映射到当前类属性上
    @ConfigurationProperties("student") //student是在配置好的key

    举例:

    在yml配置文件中,我们创建一个student对象:

     student:
          idjs: 1
          name: 张三
          age: 20

    将这个对象映射到Student类中,也就是从配置文件里读取到类中,

    package model;
    
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    
    @Component //spring 启动时直接将配置文件映射到当前类属性上
    @ConfigurationProperties("student")
    public class Student {
        private int id;
        private String name;
        private int age;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    2.使用注入的方式将对象注入到一个类中

    在启动类中注入Student类进行使用:

    package com.example.demo;
    
    import com.example.demo.model.Student;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    @SpringBootApplication
    @Component
    public class DemoApplication {
    
    
        public static void main(String[] args) {
    
            SpringApplication.run(DemoApplication.class,args);
        }
    
        //属性注入
        @Autowired
        private Student student;
        @PostConstruct
        private void postConstruct(){
            System.out.println("Read Yml:"+student);
        }
    }
    

    输出:

    Read Yml:Student{id=1, name='张三', age=20}

    注意包路径配置的问题!!!

    启动类和要注入xvvayJ的类包必须放在同级目录下,否则读取不到,会显示启动失败Applandroidication failed to start.

    SpringBoot如何配置文件properties和yml

    properties VS yml 总结

    • yml语法更简洁,可以解决数据冗余问题
    • yml跨语言的通用性更好,它不支持java语言还支持golang 和python
    • yml 支持更多的数据类型
    • yml格式的配置文件在写的时候更容易出错(冒号后面需要加一个空格),而properties虽然写法更复杂但是不容易出错。
    • yml虽然可以和properties共存,但一个项目中最好统一格式,只用其中的一个。

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

    0

    精彩评论

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