springboot读取resource配置文件生成容器对象

背景:需要对地区和语言做映射,给一个映射表,通过映射来确定最后保留的是哪个值。可以写到数据库,但是数量比较小,直接放到配置文件读取即可。

1、使用@ConfigurationProperties直接读取配置文件中的属性

1、在application.properties中配置

# 引入application-language.yml 这个文件
spring.profiles.include=language

2、application-language.yml 文件信息

language-mapping:
  ...: 其他
  Cantonese: 粤语
  Chinese: 普通话
  Danish: 丹麦语
  Mende西班牙语: 西班牙语
  Mongolian: 蒙古语
  阿拉伯语: 阿拉伯语
  安徽方言: 安徽方言
  保加利亚语: 保加利亚语

3、便携配置类注入到容器中

@Configuration
public class YmlMappingConfiguration {

    @Bean("languageMapping")
    @ConfigurationProperties("language-mapping")
    public Map<String,String> initLanguageMapping(){
        return new HashMap<>();
    }

}

此时你就可以使用了,但是有个问题,他会默认把…、汉字作为key的给过滤掉,显然不是我们要的效果。
2、直接使用Resource读取配置文件,然后使用YamlMapFactoryBean获取map对象

@Configuration
public class YmlMappingConfiguration {

    @Bean("languageMapping")
    public Map<String,String> initLanguageMapping2(){
        final Resource resource = new ClassPathResource("application-language.yml");
        final YamlMapFactoryBean factoryBean = new YamlMapFactoryBean();
        factoryBean.setResources(resource);
        final Map<String, Object> object = factoryBean.getObject();
        final HashMap<String, String> languageMappingFormat = new LinkedHashMap<>();
        Map<String, String>languageMapping=(HashMap)object.getOrDefault("language-mapping", new HashMap<String, String>());
        for (Map.Entry<String,String>entry:languageMapping.entrySet()){
            final String trimKey = StringUtils.trimToNull(entry.getKey());
            final String trimVal = StringUtils.trimToNull(entry.getValue());
            if(trimKey!=null && trimVal!=null){
                languageMappingFormat.put(trimKey,trimVal);
            }
        }
        return languageMappingFormat;
    }
}

然后就能从容器中获得该对象进行逻辑操作了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值