开发者

SpringBoot配置文件、多环境配置、读取配置的4种实现方式

目录
  • 一、写配置文件的位置
  • 二、多环境配置
  • 三、yaml配置文件
    • yaml、properties、XML对比
  • 四、读取配置文件
    • 1. @ConfigurationProperties(prefix=“key”)
    • 2. @Value(“${key}”)
    • 3. Enphpvironment对象
    • 4. @PropertySource(value=“classpath:配置文件名”)
  • 五、jsR303—参数验证
    • 常用的验证注解
  • 总结

    一、写配置文件的位置

    springboot官方规定了四个写配置文件的位置,位置如下:

    • f编程客栈ile指项目文件夹
    • classpath指打包后生成的的target文件夹

    SpringBoot配置文件、多环境配置、读取配置的4种实现方式

    读取的优先级

    优先级高会覆盖优先级低的相同配置,不同配置会互补。

    1.文件位置:

    如果这四个位置都有配置文件,会按照下图的优先级读取。

    SpringBoot配置文件、多环境配置、读取配置的4种实现方式

    2.文件名和文件后缀:

    Spring Boot默认会加载application.properties或application.yml文件,properties后缀的优先级更高。

    application.properties > application.ym

    3.配置文件中的profile-specific文件:

    可以根据激活的profile,如dev、prod等,在配置文件名后使用-{profile}来命名,这些profile-specific的配置文件将覆盖通用的配置文件中的相同属性。

    例如:

    • application-dev.properties  
    • application-prod.yml

    4.命令行参数例如:application-dev.properties   application-prod.yml

    最后,在启动jar包或war包时,可以指定参数值,命令行参数中指定的属性会覆盖之前加载的所有属性。

    # 设置环境变量
    ENV SPRING_NACOS_SERVERADDRESS='nacos.xxx.xxx:8848'
    ENV SPRING_NACOS_NAMESPACE='merit-test'
    
    # 启动jar包命令
    Java -Xms228m -Xmx228m -Dspring.cloud.nacos.config.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.config.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.config.username=merit -Dspring.cloud.nacos.config.password=merit -Dspring.cloud.nacos.discovery.server-addr=${SPRING_NACOS_SERVERADDRESS} -Dspring.cloud.nacos.discovery.namespace=${SPRING_NACOS_NAMESPACE} -Dspring.cloud.nacos.discovery.username=merit -Dspring.cloud.nacos.discovery.password=merit -jar /home/admin/merit-backend/merit-appraise-*.jar
    

    二、多环境配置

    开发、测试、生产… ,多个环境下,如何指定不同环境的配置文件,使用spring.profiles.active属性

    1. properties

    SpringBoot配置文件、多环境配置、读取配置的4种实现方式

    2. yaml

    SpringBoot配置文件、多环境配置、读取配置的4种实现方式

    三、yaml配置文件

    yaml支持多种数据结构,还支持表达式,但是对格式要求严格

    • 大小写敏感
    • 使用缩进表示层级关系
    • 缩进时不允许使用Tab键,只允许使用空格。
    • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

    1.字符串(String):表示文本数据,可以使用单引号或双引号括起来。

    name: ginjiang
    
    # 如果字符串之中包含空格或特殊字符,需要放在引号之中
    str: '内容: 字符串'
    
    # 单引号之中如果还有单引号,必须连续使用两个单引号转义
    str: 'labor''s day' 
    
    # 多行字符串:允许在YAML中表示跨越多行的字符串,使用管道符(|)或大于符号(>)进行标识
    description: |
      This is a multiline
      string in YAML.

    2.数字(Number):表示数值数据,可以是整数或浮点数。

    age: 25
    pi: 3.14159

    3.布尔值(Boolean):表示逻辑值,可以是true或false。

    isStudent: true
    hasCar: false

    4.列表(List):表示有序的数据集合,使用短横线(-)作为标记,可以包含不同类型的数据。

    pets:
      - cat
      - dog
      - pig
      
    #行内写法  
    pets: [cat,dog,pig]

    5.字典(Dictionary)/映射(Mapping)/对象(Object):表示键值对的集合,使用冒号(:)分隔键和值。

    student:
        name: qinjiang
        age: 3
     
    #行内写法
    student: {naphpme:qinjiang,age:3}

    6.字典和列表嵌套

    employees:
      - name: John
        age: 25
      - name: Alice
        age: 30

    7.空值(Null):表示空数据,使用null或~表示。

    address: null

    8.时间(Time):表示时间数据,使用ISO 8601格式表示。

    timestamp: 2023-05-25T10:30:00Z

    9.表达式

    #自动生成uuid
    name: ${random.uuid}
    
    #自动生成随机数
    name: ${random.int}
    
    #占位符:student.name有值就用student.name的值,没有就用“小王”
    name: ${student.name:小王}

    10.特殊值(Special Values):YAML支持一些特殊的值,如无穷大(Infinity)、负无穷大(Negative Infinity)、非数字(NaN)等。

    special_values:
      - infinity: .inf
      - negative_infinity: -.inf
      - not_a_number: .nan

    11.引用(References):YAML允许使用引用来引用其他节点的值,使用&符号定义引用,使用*符号引用引用的值。

    person: &ref
      name: John
      age: 25
    
    employee:
      details: *ref

    yaml、properties、xml对比

    特点YAMLPropertiesXML
    语法结构使用缩进和冒号(:)表示层级关系使用等号(=)或冒号(:)表示键值对使用标签和元素表示层级关系
    数据类型支持多种数据类型,如字符串、数字、布尔值等键值对不直接支持数据类型,通过标签定义
    可读性
    扩展性支持扩展自定义数据类型和对象结构不支持支持自定义标签和元素结构
    嵌套支持支持不支持支持
    适用场景配置文件、数据序列化和交换格式简单配置文件和属性管理复杂数据交换和配置文件

    四、读取配置文件

    1. @ConfigurationProperties(prefix=“key”)

      

    配置文件的值自动注入到实体中。  

    通过在类上使用@ConfigurationProperties注解,并指定前缀,可以将配置文件中以该前缀开头的属性值绑定到对应的类的属性上。

    SpringBoot配置文件、多环境配置、读取配置的4种实现方式

    2. @Value(“${key}”)

    给每个属性单独赋值。

    @Configuration
    public class Student{js
        @Value("${person.name}")
        private String name;
    }

    3. Environment对象

    通过注入Environment对象,使用getProperty方法获取配置文件中的属性值。

    @Component
    public class MyComponent {
        @Autowired
        private Environment environment;
    
        public void someMethod() {
            String name = environment.getProperty("person.name");
        }
    }

    4. @PropertySource(value=“classpath:配置文件名”)

      

    指定加载配置文件。  

    使用@Configuration注解和@PropertySource注解:在配置类上使用@Configuration注解,并使用@PropertySource注解指定配置文件的位置。接着使用@Value注解或Environment对象来获取属性值。

    @Configuration
    @PropertySource("classpath:my.properties")
    public class Student{
        @Value("${person.name}")
        private String name;
    }

    五、JSR303—参数验证

    @Validated 是 Spring Framework 中的一个注解,它用于在方法参数、方法返回值或类级别上启用方法参数验证(Method Parameter http://www.devze.comValidation)。

    它基于 JSR-303(Bean Validation)规范,提供了一种方便的方式来对方法参数进行验证。

    SpringBoot配置文件、多环境配置、读取配置的4种实现方式

    常用的验证注解

    • @NotNull:验证参数值不为 null。
    • @NotBlank:验证字符串参数不为空(不为 null、不为空字符串、不包含空格)。
    • @NotEmpty:验证集合或数组参数不为空。
    • @Min(value):验证数字参数的最小值。
    • @Max(value):验证数字参数的最大值。
    • @Size(min, max):验证字符串、集合或数组参数的长度或大小是否在指定范围内。
    • @Pattern(regex):验证字符串参数是否匹配指定的正则表达式。
    • @Email:验证字符串参数是否为有效的电子邮件地址。
    • @Valid:递归验证嵌套对象或集合的元素。

    总结

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

    0

    上一篇:

    下一篇:

    精彩评论

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

    最新开发

    开发排行榜