背景:需要对地区和语言做映射,给一个映射表,通过映射来确定最后保留的是哪个值。可以写到数据库,但是数量比较小,直接放到配置文件读取即可。
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;
}
}
然后就能从容器中获得该对象进行逻辑操作了。