一、写配置文件的位置
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对比
特点 | yaml | properties | xml |
---|---|---|---|
语法结构 | 使用缩进和冒号(:)表示层级关系 | 使用等号(=)或冒号(:)表示键值对 | 使用标签和元素表示层级关系 |
数据类型 | 支持多种数据类型,如字符串、数字、布尔值等 | 键值对 | 不直接支持数据类型,通过标签定义 |
可读性 | 高 | 高 | 低 |
扩展性 | 支持扩展自定义数据类型和对象结构 | 不支持 | 支持自定义标签和元素结构 |
嵌套支持 | 支持 | 不支持 | 支持 |
适用场景 | 配置文件、数据序列化和交换格式 | 简单配置文件和属性管理 | 复杂数据交换和配置文件 |
四、读取配置文件
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
:递归验证嵌套对象或集合的元素。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论