springboot官方规定了四个写配置文件的位置,位置如下:
优先级高会覆盖优先级低的相同配置,不同配置会互补。
Spring Boot默认会加载application.properties或application.yml文件,properties后缀的优先级更高。
application.properties > application.ym
可以根据激活的profile,如dev、prod等,在配置文件名后使用-{profile}来命名,这些profile-specific的配置文件将覆盖通用的配置文件中的相同属性。
例如: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属性
yaml支持多种数据结构,还支持表达式,但是对格式要求严格
name: ginjiang
# 如果字符串之中包含空格或特殊字符,需要放在引号之中
str: '内容: 字符串'
# 单引号之中如果还有单引号,必须连续使用两个单引号转义
str: 'labor''s day'
# 多行字符串:允许在YAML中表示跨越多行的字符串,使用管道符(|)或大于符号(>)进行标识
description: |
This is a multiline
string in YAML.
age: 25
pi: 3.14159
isStudent: true
hasCar: false
pets:
- cat
- dog
- pig
#行内写法
pets: [cat,dog,pig]
student:
name: qinjiang
age: 3
#行内写法
student: {name:qinjiang,age:3}
employees:
- name: John
age: 25
- name: Alice
age: 30
address: null
timestamp: 2023-05-25T10:30:00Z
#自动生成uuid
name: ${random.uuid}
#自动生成随机数
name: ${random.int}
#占位符:student.name有值就用student.name的值,没有就用“小王”
name: ${student.name:小王}
special_values:
- infinity: .inf
- negative_infinity: -.inf
- not_a_number: .nan
person: &ref
name: John
age: 25
employee:
details: *ref
特点 | YAML | Properties | XML |
---|---|---|---|
语法结构 | 使用缩进和冒号(:)表示层级关系 | 使用等号(=)或冒号(:)表示键值对 | 使用标签和元素表示层级关系 |
数据类型 | 支持多种数据类型,如字符串、数字、布尔值等 | 键值对 | 不直接支持数据类型,通过标签定义 |
可读性 | 高 | 高 | 低 |
扩展性 | 支持扩展自定义数据类型和对象结构 | 不支持 | 支持自定义标签和元素结构 |
嵌套支持 | 支持 | 不支持 | 支持 |
适用场景 | 配置文件、数据序列化和交换格式 | 简单配置文件和属性管理 | 复杂数据交换和配置文件 |
配置文件的值自动注入到实体中。
通过在类上使用@ConfigurationProperties注解,并指定前缀,可以将配置文件中以该前缀开头的属性值绑定到对应的类的属性上。
给每个属性单独赋值。
@Configuration
public class Student{
@Value("${person.name}")
private String name;
}
通过注入Environment对象,使用getProperty方法获取配置文件中的属性值。
@Component
public class MyComponent {
@Autowired
private Environment environment;
public void someMethod() {
String name = environment.getProperty("person.name");
}
}
指定加载配置文件。
使用@Configuration注解和@PropertySource注解:在配置类上使用@Configuration注解,并使用@PropertySource注解指定配置文件的位置。接着使用@Value注解或Environment对象来获取属性值。
@Configuration
@PropertySource("classpath:my.properties")
public class Student{
@Value("${person.name}")
private String name;
}
@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:递归验证嵌套对象或集合的元素。