SpringBoot配置文件

SpringBoot的配置文件以及参数配置化

⚙️ 配置方法

📄 通过配置文件配置

📋 配置文件的种类

SpringBoot 提供了多种属性配置方式:

  • application.properties

    1
    2
    
    server.port=8080
    server.address=127.0.0.1
    
  • application.yml

    1
    2
    3
    
    server:
    	port: 8080
    	address: 127.0.0.1
    
  • application.yaml

    1
    2
    3
    
    server:
    	port: 8080
    	address: 127.0.0.1
    

🏆 配置文件优先级

优先级从高到低:properties > yml > yaml

外部配置文件的优先级(从低到高):

  • classpath(resource 文件夹)
  • classpath 根 config
  • 项目根目录(对于存在继承/聚合关系的 maven 项目项目根目录是父工程的根目录)
  • 项目根目录/config
  • 直接子目录/config

🔄 多配置文件的加载

Profile 意思是配置,不同环境可能需要不同的配置需要。

SpringBoot 框架提供了多 profile 的管理功能,我们可以使用 profile 文件来区分不同环境的配置。

如果需要创建自定义的 yml 文件时,可以用 application-{profile}.yml 的命名方式。

切换不同环境的 yml 文件时在 application.yml 中配置:

1
2
3
spring:
  profiles:
    active: profile

🔧 其他配置方式

☕ Java系统属性

  • 执行 maven 打包指令 package。

  • 执行 java 指令,运行 jar 包,在执行 java 命令时添加参数。

  • 参数格式:

    1
    
    -Dxxx=xxx
    

🖥️ 命令行参数

  • 执行 maven 打包指令 package。

  • 执行 java 指令,运行 jar 包,在执行 java 命令时添加参数。

  • 参数格式:

    1
    
    --xxx=xxx
    

📊 配置方法的优先级

优先级从低到高:

  • application.yaml(忽略)
  • application.yml
  • application.properties
  • java 系统属性(-Dxxx=xxx)
  • 命令行参数(–xxx=xxx)

📝 yml文件语法

🔤 基本语法

  • 大小写敏感
  • 数值前边必须有空格,作为分隔符
  • 使用缩进表示层级关系,缩进时,不允许使用 Tab 键,只能用空格(idea 中会自动将 Tab 转换为空格)
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
  • # 表示注释,从这个字符一直到行尾,都会被解析器忽略

📊 数据格式

  • 对象/Map 集合

    1
    2
    3
    4
    
    user:
    	name: zhangsan
    	age: 18
    	password: 123456
    
  • 数组/List 集合

    1
    2
    3
    4
    
    hobby:
    	- java
    	- game
    	- sport
    

🎯 参数配置化

📌 利用注解进行参数配置化

@Value 通常用于外部配置的属性注入,具体用法为:@Value("${配置文件中的key}")

在 Spring 框架中,@Value 注解用于注入外部化的配置值到 Spring 管理的 Bean 中。通过 @Value 注解,可以将属性文件、环境变量、系统属性等外部资源中的值注入到 Spring Bean 的字段、方法参数或构造函数参数中。

示例代码

1
2
3
4
aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=LTAI4GCHlvX6DKqJWxdбnEuW
aliyun.oss.accessKeySecret=yBshYweHOpqDuhCArrVHwIiBKPYqSL
aliyun.oss.bucketName=web-tlias
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
@Component
pubiic class AliossUti1s{
 @Value("${aliyun.oss.endpoint}")
 private string endpoint;
	
 @Value("${aliyun.oss.accessKeyId}")
 private string accesskeyId;
	
 @Value("${aliyun.oss.accessKeySecret}")
 private String accessKeySecret;
	
 @Value ("${aliyun.oss.bucketName } ")
 private String bucketName
}

🏗️ 使用自定义配置类进行参数配置化

自定义 properties 文件使用 @Component 注册为 Bean 对象,使用 @ConfigurationProperties 注解批量的将 yml 配置文件的属性和 Bean 对象属性绑定,@ConfigurationProperties 的 prefix 属性指定 application.yml 的子节点,该节点中的子节点将自动和属性进行绑定。

示例代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
@Data
@Component
@ConfigurationProperties(prefix = "operator.aliyun.oss")
public class AliyunOSSProperties {
    String endpoint;
    String accessKeyId;
    String accessKeySecret;
    String bucketName;
    String region;
}

@ConfigurationProperties 支持 jsr-300 数据校验使用 @Validate

{{<notice tip>}}

jsr-300 数据校验:

  • @Null:被注释的元素必须为 null
  • @NotNull:被注释的元素必须不为 null
  • @AssertTrue:被注释的元素必须为 true
  • @AssertFalse:被注释的元素必须为 false
  • @Min(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @Max(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @DecimalMin(value):被注释的元素必须是一个数字,其值必须大于等于指定的最小值
  • @DecimalMax(value):被注释的元素必须是一个数字,其值必须小于等于指定的最大值
  • @Size(max, min):被注释的元素的大小必须在指定的范围内
  • @Digits(integer, fraction):被注释的元素必须是一个数字,其值必须在可接受的范围内
  • @Past:被注释的元素必须是一个过去的日期
  • @Future:被注释的元素必须是一个未来的日期

{{</notice>}}

그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计