当前位置: 代码网 > it编程>编程语言>Java > SpringBoot配置文件、多环境配置、读取配置的4种实现方式

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

2024年09月23日 Java 我要评论
一、写配置文件的位置springboot官方规定了四个写配置文件的位置,位置如下:file指项目文件夹classpath指打包后生成的的target文件夹读取的优先级优先级高会覆盖优先级低的相同配置,

一、写配置文件的位置

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

  • file指项目文件夹
  • classpath指打包后生成的的target文件夹

读取的优先级

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

1.文件位置:

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

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

2. yaml

三、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: {name: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注解,并指定前缀,可以将配置文件中以该前缀开头的属性值绑定到对应的类的属性上。

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

给每个属性单独赋值。

@configuration
public class student{
    @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 validation)。

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

常用的验证注解

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com