Springboot配置文件取值方法,配置List和Map

在开发中将一些固定的,基本不变的值保存到配置文件中是一个好的习惯,例如数据库地址等信息写到配置文件中,在需要改动时能第一时间找到,而且在多处需要引用的时候,若改动也只需改动一处,很方便实用的说

一、获取普通参数

通过@Value("${key}")取值
做法是,比如配置文件application.yml中有以下内容

btcoin:
  address:
    min_1: https://www.okcoin.com/

在要使用的类中添加

    @Value("${btcoin.address.min_1:defaultValue}")
    private String address_min_1;

这样就可以直接使用了!在引用路径后加上冒号,那么冒号后的就是默认值,当配置文件中未配置该参数时就会使用默认值而不报错,例如上例的:defaultValue
就我而言,将所有的配置信息都封装为一个类,然后在其他的类中使用@Autowired进行注入配置类进行使用。

在配置文件中也可以引用配置文件中的值,如下所示使用${key}

name=springboot
server.name=this is a ${name}

二、获取List参数

1.配置文件application.yml中有以下内容

prop:
  myList: wo,zhen,shuai

在要使用的类中添加,这种定义方式yml和properties都能用

    @Value("${prop.myList}")
    private List<String> myList;

或者你不想使用逗号做分隔符,也可以使用EL表达式

prop:
  myElList: wo-zhen-shuai

在这个表达式中,先判空,再做分割

    @Value("#{'${prop.myElList:}'.empty ? null : '${prop.myElList:}'.split('-')}")
    private List<String> myElList;

2.使用配置类方式,但此时不能使用普通的@Value,否则会报错
yml配置文件定义:

prop:
  myYmlList:
    - yml1
    - yml2
    - yml3

properties配置文件定义:

prop.myPropertiesList[0]=aaa
prop.myPropertiesList[1]=bbb
prop.myPropertiesList[2]=ccc

此时需要定义一个配置类,然后使用@ConfigurationProperties(“prop”)注解,填入list的前缀,并在类中定义与list参数名一致的参数myYmlList

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;

@Configuration
@ConfigurationProperties("prop")
@Data
public class Config {
    private List<String> myYmlList;
    private List<String> myPropertiesList;
}

使用时使用注入的方式,然后获取类参数

    @Autowired
    private Config config;

三、获取Map参数

1.使用#{}方式,这个叫做EL 表达式

    @Value("#{${prop.myPropertiesMap}}")
    private Map<String, String> myPropertiesMap;

properties配置文件

prop.myPropertiesMap={"name":"wo","face":"zhenshuai"}

yml配置文件定义,注意和properties的区别,此时的json串前后多了单引号

prop:
  myYmlMap2: '{"name":"wo","face":"zhenshuai"}'

2.使用配置类方式,通过下述方法定义的Map也不能使用普通的@Value,否则会报错
yml配置文件定义:

prop:
  myYmlMap:
    name: wo
    face: zhenshuai

properties配置文件定义:

prop.myPropertiesMap.name=wo
prop.myPropertiesMap.face=zhenshuai

配置类定义:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import java.util.List;
import java.util.Map;

@Configuration
@ConfigurationProperties("prop")
@Data
public class Config {
    private Map<String,String> myYmlMap;
    private Map<String,String> myPropertiesMap;
}

参考博客:https://program.blog.csdn.net/article/details/107194137

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值