亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式

瀏覽:18日期:2023-09-08 10:09:12

默認(rèn)spring裝載的都是.properties格式的配置文件,但是有時(shí)我們需要定義list或者map類(lèi)型的配置,那么yaml就具有優(yōu)勢(shì)。

以下演示利用apollo來(lái)完成自動(dòng)更新ip白名單的功能

1.重寫(xiě)配置工廠

public class YmlPropertySourceFactory extends DefaultPropertySourceFactory { public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException { String configName = resource.getResource().getFilename(); ConfigFile configFile = ConfigService.getConfigFile(configName.substring(0, configName.indexOf('.')), ConfigFileFormat.YML); String ct = configFile.getContent(); return YamlPropUtil.buildYaml(configName, ct); }}

定義-D參數(shù)的appid和conf目錄

public class YamlPropUtil { public static PropertySource buildYaml(String name, String content) throws IOException { String sysName = System.getProperty('app.id'); String appDir = System.getProperty('apollo.cacheDir'); if (appDir.endsWith(File.separator)) { appDir= appDir.substring(0, appDir.length() - 1); } String filePath = appDir+ File.separator + sysName + File.separator + name; File file = new File(filePath); if (file.exists()) { file.delete(); } try (BufferedWriter bufferedWriter = Files.newWriter(file, Charsets.UTF_8)) { bufferedWriter.write(content); bufferedWriter.flush(); List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(name, new FileSystemResource(filePath)); return sources.get(0); } catch (IOException e) { throw e; } }}

2.裝載配置

whiteList.yml

注意本地也要存放上述文件在classpath下

white: ip: #ip白名單列表 list: - 192.168.103.34 - 192.168.1.102@Configuration@ConfigurationProperties(prefix = 'white.ip')@PropertySource(value = 'classpath:whiteList.yml', factory = YmlPropertySourceFactory.class)@Slf4jpublic class IpWhiteListService { private List<String> list; private final static int MAX_PROP_ITEM = 1000; private final static String PROP_NAME = 'whiteList.yml'; private final static String KEY_PREFIX = 'white.ip.list'; public void setList(List<String> list) { this.list = list; } public boolean isAllow(String address) { return list.contains(address); } @ApolloConfigChangeListener(PROP_NAME) public void onChange(ConfigChangeEvent changeEvent) { Set<String> keys = changeEvent.changedKeys(); keys.forEach(e -> { String newVal = changeEvent.getChange(e).getNewValue(); log.debug('whiteList is changed={}', newVal); String ct = newVal; org.springframework.core.env.PropertySource propertySource = null; try { propertySource = YamlPropUtil.buildYaml(PROP_NAME, ct); } catch (IOException ex) { log.error('', e); } List<String> newList = Lists.newArrayList(); for (int i = 0; i < MAX_PROP_ITEM; i++) { String pName = KEY_PREFIX + '[' + i + ']'; if (propertySource.containsProperty(pName)) { String val = (String) propertySource.getProperty(pName); newList.add(val); } } list = newList; }); }}

補(bǔ)充知識(shí):yml格式問(wèn)題

以縮進(jìn)代表層級(jí)關(guān)系

空格個(gè)數(shù)不重要,但是同一層級(jí)必須左對(duì)齊

大小寫(xiě)敏感

格式為:key= value

注釋單行用#,只能注釋單行

application.properties中

logging.level.root=DEBUGlogging.level.org.springframework=DEBUGlogging.level.org.org.mybatis=DEBUG

轉(zhuǎn)化為application.yml中

logging:level:root: DEBUGorg.springframework: DEBUGorg.org.mybatis: DEBUG

冒號(hào)后面必須跟空格,否則格式錯(cuò)誤

以上這篇spring+apollo動(dòng)態(tài)獲取yaml格式的配置方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 成人在线播放视频 | 妞干网在线免费视频 | 农村三级孕妇视频在线 | 色婷婷综合激情 | 国内真实迷j下药在线观看 国内真实愉拍系列情侣 | 成人国产精品一区二区网站 | 久久国产精品一区 | 欧美成人免费看片一区 | 打床炮视频在线观看免费 | 美国一级毛片aa | 一级黄色欧美 | 在线网站cosplay福利视频 | 国产成人精品午夜二三区 | 免费观看黄的小视频 | 国产高清一区二区三区四区 | 朴妮唛19禁福利视频在线 | 国产精品无码久久综合网 | 美女18一级毛片免费看 | 亚洲码在线中文在线观看 | 亚洲精品麻豆一区二区 | 自拍啪啪| 欧美精品亚洲精品日韩经典 | 精品日韩一区 | 日本黄色大片视频 | 美女黄色网 | 一级毛片aaa片免费观看 | 久久久久久国产a免费观看黄色大片 | 青青免费视频在线 | 亚洲春色综合另类网蜜桃 | 131美女爱做免费高清视频 | 一级毛片不收费 | 色婷婷视频 | 日韩女同一区二区三区 | 亚洲日韩视频免费观看 | 亚欧精品一区二区三区 | 国产真实伦偷精品 | 免费a级黄毛片 | 日本亚洲一区二区三区 | 日韩啪啪网 | 国产精品久久久久免费 | 久久精品视频在线观看榴莲视频 |