纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

SpringBootSpringCloud自定义配置文件(如

3月3日 不将就投稿
  SpringBoot配置
  在spring中我们都知道所有配置定义在配置文件application。yml中我们就可以通过注解获取到。
  Spring中对所有配置管理都有一个统一的上层接口Environment
  实现类图
  可以看到实现类是非常多的。不过实际所有的配置获取都是封装在最上层的接口PropertyResolver中的
  这里需要注意的是PropertyResolver的核心实现类PropertySourcesPropertyResolver
  而PropertySourcesPropertyResolver中拥有的PropertySources最后使用的也还是PropertySource类,通过遍历PropertySource集合
  而PropertySource最终是通过拥有一个泛型Tsource获取最终的属性
  所以这里可以看到我们所有的资源都是一个PropertySource
  需要注意的是,PropertySource之间是有优先级顺序的,如果有一个Key在多个PropertySource中都存在,那么在前面的PropertySource优先。
  大致获取的原理这里引用apollo的一张图
  这张图就是比较清晰的简单测试使用
  springboot版本2。6。8
  yaml配置一个name属性name:1214RestControllerpublicclassEnvironementController{AutowiredEValue({name})privateSGetMapping(name)publicStringenv(){System。out。println(name);returnenvironment。getProperty(name);}}
  无论是使用Value还是Environment都能获取到我们的自定义属性
  然后调用接口就能获取到我们配置中的属性了
  SpringCloud自定义配置文件获取
  在了解了上面的原理及基本使用之后我们可以就可以自定义配置文件了。核心思路就是通过读取文件然后加载到PropertySource中去。
  而SpringCloud刚好提供类这方面的扩展,SpringCloud提供了PropertySourceLocator接口供我们加载自定义配置成PropertySource
  我们这里只需要实现locate即可
  按这个方式我们来自定义配置试试1。引入依赖propertiesproject。build。sourceEncodingUTF8project。build。sourceEncodingmaven。compiler。source1。8maven。compiler。sourcemaven。compiler。target1。8maven。compiler。targetspringcloud。version2021。0。2springcloud。versionspringboot。version2。7。0springboot。versionpropertiesdependencygroupIdorg。springframework。cloudgroupIdspringcloudcontextartifactIddependencydependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterartifactIddependencydependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterbootstrapartifactIddependencydependencygroupIdorg。springframework。bootgroupIdspringbootstarterwebartifactIddependencydependencyManagementdependenciesdependencygroupIdorg。springframework。bootgroupIdspringbootdependenciesartifactIdversion{springboot。version}versiontypepomtypescopeimportscopedependencydependencygroupIdorg。springframework。cloudgroupIdspringclouddependenciesartifactIdversion{springcloud。version}versiontypepomtypescopeimportscopedependencydependenciesdependencyManagement
  注意springCloud2020版本后需要手动引入依赖springcloudstarterbootstrap2。自定义配置2。1自定义PropertySource,这里我们直接使用Spring提供的MapPropertySourcepackagecom。zou。importjava。util。Mimportorg。springframework。core。env。MapPropertySauthor:whdate:202271209:54description:publicclassZouMapPropertySourceextendsMapPropertySource{Createanew{codeMapPropertySource}withthegivennameand{codeMap}。paramnametheassociatednameparamsourcetheMapsource(without{codenull}valuesinordertogetconsistent{linkgetProperty}and{linkcontainsProperty}behavior)publicZouMapPropertySource(Stringname,MapString,Objectsource){super(name,source);}}2。2自定义PropertySourceLocatorpackagecom。zou。importjava。io。IOEimportjava。nio。charset。StandardCimportjava。nio。file。Fimportjava。nio。file。Pimportjava。util。HashMimportjava。util。Limportjava。util。Mimportorg。springframework。boot。json。JsonPimportorg。springframework。boot。json。JsonParserFimportorg。springframework。cloud。bootstrap。config。PropertySourceLimportorg。springframework。core。annotation。Oimportorg。springframework。core。env。Eimportorg。springframework。core。env。PropertySauthor:whdate:202271209:56description:Order(0)publicclassZouJsonPropertySourceLocatorimplementsPropertySourceLocator{OverridepublicPropertyS?locate(Environmentenvironment){returnnewZouMapPropertySource(ZouMapPropertySource,mapPropertySource());}privateMapString,ObjectmapPropertySource(){MapString,ObjectresultnewHashMap();JsonParserparserJsonParserFactory。getJsonParser();MapString,ObjectfileMapparser。parseMap(readFile());processNestMap(,result,fileMap);}读取配置文件zou。jsonreturnprivateStringreadFile(){ListStry{linesFiles。readAllLines(Paths。get(srcmainresourceszou。json),StandardCharsets。UTF8);}catch(IOExceptione){thrownewRuntimeException(e);}StringBuildersbnewStringBuilder();for(Stringline:lines){sb。append(line);}returnsb。toString();}privatevoidprocessNestMap(Stringprefix,MapString,Objectresult,MapString,ObjectfileMap){if(prefix。length()0){prefix。;}for(Map。EntryString,ObjectentrySet:fileMap。entrySet()){if(entrySet。getValue()instanceofMap){processNestMap(prefixentrySet。getKey(),result,(MapString,Object)entrySet。getValue());}else{result。put(prefixentrySet。getKey(),entrySet。getValue());}}}}2。3自定义配置BeanconfigConfiguration(proxyBeanMethodsfalse)publicclassZouConfiguration{BeanpublicZouJsonPropertySourceLocatorzouJsonPropertySourceLocator(){returnnewZouJsonPropertySourceLocator();}}2。4定义BootstrapConfiguration配置
  在resources添加spring。factories配置文件org。springframework。cloud。bootstrap。BootstrapConfigurationcom。zou。config。ZouConfiguration3。测试
  这里简单定义一个我们自己的配置文件zou。json
  {name:xiaozou}
  定义一个测试controllerRestControllerRequestMapping(testv1)publicclassZouController{AutowiredEValue({name:1})privateSGetMapping(name)publicStringenv(){System。out。println(name);returnenvironment。getProperty(name);}}
  可以看到我们自定义配置是生效了的
  SpringCloud整合自定义配置还是比较容易的,核心还是自定义一个ZouJsonPropertySourceLocator然后加载PropertySource到Spring中。这里我们整合的是本地文件,其实如果要整合远程配置中心也是类似的,只不过获取文件就不是读取本地配置文件,而是通过http读取远程配置文件然后构造出一个PropertySource放入Spring容器中。后续有机会我们对nacos整合SpringCloud源码进行分析
投诉 评论 转载

我们经常接触的模拟类游戏到底算不算游戏?近年来越来越多不同的模拟器让玩家津津乐道,不能否认的一点,就是这类游戏在直播圈非常受欢迎,真实度高的模拟游戏当然可以为大家带来一些有趣的知识,但恶搞的模拟类游戏又可以给大家带来……尼尔自动人形隐藏门关卡可玩Mod现已推出之前在《尼尔:自动人形》玩家社群中掀起轩然大波的游戏秘密隐藏门最终被确认为一群爱好者使用自己开发的编辑器制作,而非《尼尔:自动人形》中存在的还未被发现的彩蛋。如今,这些玩家自制……新人大讲堂有规划的学技能,省事省力又省钱新人大讲堂,开课!萌新进阶之路,已经给大家铺好啦。希望能帮助新船长们快速成长,也欢迎各位老船长一同探讨交流在EVE中,角色之间最主要的差距,主要在……周琦欲获自由身!谢立彬请辞首钢主帅,北控不满张劲松再换帅头条创作挑战赛在CBA常规赛第二阶段结束后,所有球队都选择提前放假,让球员与阔别已久的亲人一道欢度春节,并且大多数球员都选择在农历正月十五过后,也就是2月6日集结,备战即……朱亚文追妻路上有艰辛,后悔结婚太晚,我的荷尔蒙只对妻子释放8月24日,朱亚文和万茜主演的新剧《简阳的夏冬》播出,在剧中朱亚文饰演的夏冬拒绝了人美多金的富家女谢千朵,被性格纯真的简阳吸引,两人的甜蜜互动甜倒了不少观众。这个角色和朱……独特气质曲音溶溶头条创作挑战赛独特气质曲音溶溶文绿怡香轩穿行在十一月的果林,风轻轻地扬起柔和的发丝。圆圆的石桌,青青的石板路。香甜柔软的果子、清脆的曲……奶奶每天带8岁孙子打牌不被看好,孩子进步却让人佩服,原因简单孩子不喜欢看书怎么办?很多朋友跟我吐槽,自家孩子到了七八岁,特别喜欢玩游戏不喜欢看书,导致孩子专注力差,知识积累少,总被老师说,以前我对这些吐槽没有多在乎,因为我们家儿子乐乐还……数百万人被割,损失1800亿,又一骗局席卷中国县城在中国的经济社会发展中,各种骗局层出不穷,数百万人被骗,损失惨重。最近,又有一种骗局席卷中国县城,让数百万人被割,损失高达1800亿。这个骗局被称为县域贷。什么是县域贷?……爱HIFI歌剧一号PK天朗斯大林,谁是同轴音箱王者?忘记是哪位坛友看曾经说过唯人不识同轴箱,阅尽万箱也惘然,当时看了还不以为然,从朋友那听过一次天朗西敏寺之后,那声音的层次感、定位以及解析力让我这一辈子都难忘,至此中毒就同轴音箱……周一晚间迎来两大利好,这两个板块或将迎来大幅上涨周一晚间,消息面并不平静,陆续迎来两大利好消息:国家能源局:正在组织编制千乡万村驭风行动方案,争取尽快推动实施;交通运输部、发改委等六部门印发《农村公路扩投资稳就业更好服务乡村……SpringBootSpringCloud自定义配置文件(如SpringBoot配置在spring中我们都知道所有配置定义在配置文件application。yml中我们就可以通过注解获取到。Spring中对所有配置管理都有一……二线豪华品牌艰难求生!英菲尼迪销量跌幅超五成华夏时报(www。chinatimes。net。cn)记者牛小欧于建平北京报道以最新上险数据口径计算,2022年国内合资进口豪华车零售市场销量为347万辆(含特斯拉),同……
红魔7月重拳出击,地表游戏手机来了2018十一国庆放假时间通知开车回家可省高速费一分钟资讯小米苹果中兴IQOO黑鲨华为,最新消息危及职业生涯,西蒙斯伤情恶化!投靠杜兰特失败,你将继续被交易杨振宁为何宁愿与中科院有分歧,也一定要反对大型对撞机的建造?1年底薪?湖人要迎回136旧将?一点让詹姆斯浓眉受益天马望远镜为OrionKL体检报告发布补办身份证需要什么身份证丢了怎么办什么叫太a了说女生很a说男生太a了什么梗82岁奶奶击退劫匪怎么回事画面还原事发经过详情应届生2天被骗7万还原事件始末到底怎么回事连损失两员大将,中国女排新帅着手培养自己的亲信,郎平旧将不要公安机关打击传销法律依据!圣女果能减肥吗?圣女果可以减肥吗闯红灯如何处罚起夜怎么造句英超曼联VS阿森纳六连胜还是被终结就看今晚傲雪梅花说课稿范文心灵的瑜珈追梦杜芳的结局是什么杜芳历史原型是谁?水稻得了纹枯病怎么办简短情话浪漫情话那个夏天作文800字2021。09。16早安心语,正能量哲学语录句子,超赞的早上

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形