java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot配置文件、多环境配置、读取配置的实现

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

作者:夏诗曼CharmaineXia

SpringBoot支持多种配置文件位置和格式,其中application.properties和application.yml是默认加载的文件,配置文件可以根据环境通过spring.profiles.active属性进行区分,命令行参数具有最高优先级,可覆盖其他所有配置

一、写配置文件的位置

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

读取的优先级

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

1.文件位置:

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

2.文件名和文件后缀:

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

application.properties > application.ym

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

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

例如:

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支持多种数据结构,还支持表达式,但是对格式要求严格

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)规范,提供了一种方便的方式来对方法参数进行验证。

常用的验证注解

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文