当前位置: 代码网 > it编程>编程语言>Java > Springboot配置文件相关语法及读取方式详解

Springboot配置文件相关语法及读取方式详解

2025年12月11日 Java 我要评论
配置文件的形式目前,springboot的配置文件有2种形式。1、.properties文件,一般习惯称其为properties文件,e.g.application.properties;2、.yml

配置文件的形式

目前,springboot的配置文件有2种形式。

1、.properties文件,一般习惯称其为properties文件,e.g.application.properties;

2、.yml/.yaml文件(2个后缀都是一样的文件,一般常用.yml),一般习惯称其为yaml文件,e.g.application.yml/application.yaml;

语法

它只有2种核心语法,一种是key-value,一种是数组,以下以.yml文件为主。

1、key-value形式

它支持字符串类型(支持转义字符,比如\n同样会换行,本质就是string类型),数字类型和boolean类型,如下:

# .yml文件示例
config0:
  string: abcd      # 字符串
  number: 123       # 数字类型
  boolean: true     # boolean类型


# .properties文件示例
# config0.string=abcd
# config0.number=123
# config0.boolean=true

最常见的读取方式示例如下:

@value("${config0.string}")
private string config0string;

@value("${config0.number}")
private int config0number;

@value("${config0.boolean}")
private boolean config0boolean;

.yml文件还有另外一种行内写法(可读性很差,所以并不常用),如下:

# 注意相关空格,且没有任何引号。否则无法识别抛出异常
config0: {string: abcd,number: 123,boolean: true}

注:行内写法并不能直接转为map,也只能通过config0.string...进行读取。

2、数组形式

它支持字符串类型(支持转义字符,比如\n同样会换行,本质就是string类型),数字类型和boolean类型,如下:

# .yml文件示例,注意相关空格
config1:
  list:
    - abcd     # 字符串类型
    - 123      # 数字类型
    - true     # boolean类型


# .properties文件示例
#config1.list[0]=abcd
#config1.list[1]=123
#config1.list[2]=true

最常见的读取方式示例如下:

@value("${config1.list[0]}")
private  string config1string;
	
@value("${config1.list[1]}")
private  int config1number;
	
@value("${config1.list[2]}")
private  boolean config1boolean;

.yml文件还有另外一种行内写法(可读性很差,所以并不常用),如下:

config1:
  list: [abcd, 123, true]

注:行内写法并不能直接转为list,也只能通过config1.list[0]...进行读取。

总结:不管配置文件多么的花里胡哨,都是由上面2种类型构造而成。如下尝试构建一个复杂的配置文件。

# .yml文件示例
config2: 
  card: 
  - visa: 招商银行信用卡
  - visa: 浦发银行信用卡
  - 建设银行
  - 中国银行
  - 农业银行
  - 工商银行
  name: 张三
  age : 28


# .properties文件示例
# config2.card[0].visa=招商银行信用卡
# config2.card[1].visa=浦发银行信用卡
# config2.card[2]=建设银行
# config2.card[3]=中国银行
# config2.card[4]=农业银行
# config2.card[5]=工商银行
# config2.name=张三
# config2.age=28

读取方式如下:

@value("${config2.card[0].visa}")
private string visa1;
	
@value("${config2.card[1].visa}")
private string visa2;
	
@value("${config2.card[2]}")
private string bankcard1;
	
@value("${config2.card[3]}")
private string bankcard2;
	
@value("${config2.card[4]}")
private string bankcard3;
	
@value("${config2.card[5]}")
private string bankcard4;
	
@value("${config2.name}")
private string name;
	
@value("${config2.age}")
private int age;

说明:上面的写法是不能直接转为java代码中的map和list,不过,它是支持直接转为map和list的。但是,直接转为map和list和上面的写法实现的目的是一样的,需要遵循一些特殊写法,如果需要在代码中传递map或者list,在代码中重新构造即可,利用配置文件直接转map或list,就是脱裤子放屁,核心就是上面的2种语法。

读取方式

1、通过@value注解

上面已经对其进行过说明,这里举例说明一下,直接将配置项转map有多鸡肋。

配置项:

config: 
  map: '{"name": "张三", "age": 18}'

代码:

// 外面需要包一个#{}
@value("#{${config.map}}")
private map<string, object> configmap;

我认为,它不仅可读性差,还容易出错,如果需要使用map,还不如读取3个配置项,重新构造一个map对象。

注:不管是直接转map的表达式还是上面的数组项读取,都是由springel表达式提供解析。

2、通过@configurationproperties注解

使用@configurationproperties注解的时候,建议引入以下jar包(编译器会出现警告):

<dependency>
    <groupid>org.springframework.boot</groupid>
	<artifactid>spring-boot-configuration-processor</artifactid>
	<optional>true</optional>
</dependency>

它常用于批量解析配置项,所以构建配置类的时候,用它就特别方便。

它与@value有以下区别

1、@configurationproperties不支持sringel表达式,所以这里注意,它不能解析key-value与数组结合的形式,如下:

如果引入了<spring-boot-configuration-processor>jar包,这种复杂写法编译器会在配置文件中报错的。

# @configurationproperties不能解析
config: 
  card: 
    - visa: 招商银行信用卡
    - visa: 浦发银行信用卡
    - 建设银行
    - 中国银行
    - 农业银行
    - 工商银行

2、@configurationproperties对于直接map和list比较方便;

3、@configurationproperties支持jsr303数据校验。

@configurationproperties注解常用属性

1、prefix:用于指定配置项前缀;

2、value:同prefix,建议使用prefix,语义更明显;

3、ignoreinvalidfields:忽略受校验的字段,默认false;

4、ignoreunknownfields忽略未识别的字段,默认true。

配置文件:

config: 
  user: 
    name: 张三
    cards: 
      - 招商银行
      - 建设银行
    age: 28
    map: {key1: value1,key2: value2}

读取代码:

注:用@configurationproperties读取的时候,一定要提供set方法。

@component
@configurationproperties(prefix = "config.user")
public class userbean {

	private string name;
	
	private list<string> cards;
	
	private string age;
	
	private map<string, string> map;


    // 省略get/set

}

3、通过environment(org.springframework.core.env.environment)读取

配置文件:

# 注意相关空格
config1:
  list:
    - abcd     # 字符串类型
    - 123      # 数字类型
    - true     # boolean类型

读取代码:

// 常用下面2个方法,一个是默认以string类型读取,一个是指定类型读取
string config0string = env.getproperty("config0string");
int config0number = env.getproperty("config0number", integer.class);
boolean config0boolean = env.getproperty("config0boolean", boolean.class);

根据实际场景,选择最适合的方式就是好方式。

总结

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

(0)

相关文章:

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

发表评论

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