SpringBoot application.yml文件配置Map<String,List<String>>类型映射


你好,如果你在为无法使用 @ConfigurationProperties注解完成 Map<String, List<String>>的自动装配而烦恼,请看这篇文章,希望对你有所帮助!

配置部分

我们使用的是Spring Boot,遵循约定大于配置的理念,故在配置前你得了解它们是如何约定好的。我们首先需要在实体配置对象Properties.java处讲好是从yml的哪个前缀后开始扫描读取,然后在application.yml文件定义好数据映射关系,最后在Spring主程序入口处让我们使用了@ConfigurationProperties注解的类生效。

application.yml部分

首先我们要清楚@ConfigurationProperties注解可以使用(prefix = "xxx")这样来筛选前缀来自动装配数据,而成员变量名则对应前缀之下的yml标记语言,列表或数组可以用[]方括号来表示,则可以以下为例:

# 分布式数据源关联映射 Map<String, List<String>>
source:
  # 成员变量名
  sources:
    # 键值对
    intouch: [intouch-master,intouch-slave]
    power-top: [power-top-master,power-top-slave]
    power-bottom: [power-bottom-master,power-bottom-slave]

Properties.java部分

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

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

@Configuration
@ConfigurationProperties(prefix = "source")
@Validated
@Data
public class SourcesProperties {
    private Map<String, List<String>> sources;
}

Application.java部分

@EnableScheduling
@SpringBootApplication(scanBasePackages = "xxx.xxx.**")
@EnableConfigurationProperties({
        SourcesProperties.class
})
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

如何使用

既然是在spring项目中使用,就需要理解清楚Properties.java类对象需要被严格控制它的使用,是不希望被其他对象依赖注入后修改其内部属性的。所以我们的使用方式应使用final来限定

ServiceImpl.java部分

@Service
public class DataCollectionServiceImpl implements DataCollectionService {
	private final SourcesProperties sourcesProperties;

    @Autowired
    public DataCollectionServiceImpl(SourcesProperties sourcesProperties) {
        this.sourcesProperties = sourcesProperties;
    }
    
    public void show(){
        sourcesProperties.getSources().forEach((k,v) -> {
            System.out.println(k + ":" + v);
        });
    }
}

运行日志:
show方法输出内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值