范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

SpringBootSpringCloud自定义配置文件(如何整合配置中心)

  Spring Boot配置
  在spring中我们都知道所有配置定义在配置文件   application.yml   中我们就可以通过注解获取到。
  Spring 中对所有配置管理都有一个统一的上层接口  Environment
  实现类图
  可以看到实现类是非常多的。不过实际所有的配置获取都是封装在最上层的接口   PropertyResolver   中的
  这里需要注意的是   PropertyResolver   的核心实现类  PropertySourcesPropertyResolver
  而   PropertySourcesPropertyResolver   中拥有的  PropertySources   最后使用的也还是  PropertySource   类,通过遍历  PropertySource   集合
  而   PropertySource   最终是通过拥有一个泛型T source获取最终的属性
  所以这里可以看到我们所有的资源都是一个   PropertySource
  需要注意的是,PropertySource之间是有优先级顺序的,如果有一个Key在多个   PropertySource   中都存在,那么在前面的  PropertySource   优先。
  大致获取的原理这里引用apollo的一张图
  这张图就是比较清晰的  简单测试使用
  spring boot 版本 2.6.8
  yaml 配置一个name属性  name: 1214@RestController public class EnvironementController {       @Autowired     Environment environment;      	@Value("${name}")     private String name;      @GetMapping("/name")     public String env(){           System.out.println(name);         return environment.getProperty("name");     } }
  无论是使用   @Value   还是  Environment   都能获取到我们的自定义属性
  然后调用接口就能获取到我们配置中的属性了
  Spring Cloud自定义配置文件获取
  在了解了上面的原理及基本使用之后我们可以就可以自定义配置文件了。核心思路就是通过读取文件然后加载到   PropertySource   中去。
  而Spring Cloud刚好提供类这方面的扩展,Spring Cloud 提供了   PropertySourceLocator   接口供我们加载自定义配置成  PropertySource
  我们这里只需要实现locate即可
  按这个方式我们来自定义配置试试  1. 引入依赖         UTF-8         1.8         1.8             2021.0.2         2.7.0        		             org.springframework.cloud             spring-cloud-context                               org.springframework.cloud             spring-cloud-starter                               org.springframework.cloud             spring-cloud-starter-bootstrap                               org.springframework.boot             spring-boot-starter-web          		 		                                       org.springframework.boot                 spring-boot-dependencies                 ${spring-boot.version}                 pom                 import                                           org.springframework.cloud                 spring-cloud-dependencies                 ${spring-cloud.version}                 pom                 import                                  
  注意spring Cloud 2020版本后需要手动引入依赖   spring-cloud-starter-bootstrap  2. 自定义配置2.1 自定义PropertySource,这里我们直接使用Spring 提供的MapPropertySourcepackage com.zou.config;  import java.util.Map;  import org.springframework.core.env.MapPropertySource;  /**  *@author : wh  *@date : 2022/7/12 09:54  *@description:  */ public class ZouMapPropertySource extends MapPropertySource {     	/** 	 * Create a new {@code MapPropertySource} with the given name and {@code Map}. 	 * 	 * @param name   the associated name 	 * @param source the Map source (without {@code null} values in order to get 	 *               consistent {@link #getProperty} and {@link #containsProperty} behavior) 	 */ 	public ZouMapPropertySource(String name, Map source) {   		super(name, source); 	} 	 	 }2.2 自定义PropertySourceLocatorpackage com.zou.config;  import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.HashMap; import java.util.List; import java.util.Map;  import org.springframework.boot.json.JsonParser; import org.springframework.boot.json.JsonParserFactory; import org.springframework.cloud.bootstrap.config.PropertySourceLocator; import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; import org.springframework.core.env.PropertySource;  /**  * @author : wh  * @date : 2022/7/12 09:56  * @description:  */ @Order(0) public class ZouJsonPropertySourceLocator implements PropertySourceLocator {    	@Override 	public PropertySource<?> locate(Environment environment) {   		return new ZouMapPropertySource 				("ZouMapPropertySource", mapPropertySource()); 	}  	private Map mapPropertySource() {   		Map result = new HashMap<>(); 		JsonParser parser = JsonParserFactory.getJsonParser(); 		Map fileMap = parser.parseMap(readFile()); 		processNestMap("", result, fileMap); 		return result; 	}  	/** 	 * 读取配置文件 zou.json 	 * 	 * @return 	 */ 	private String readFile() {   		List lines; 		try {   			lines = Files.readAllLines(Paths.get("src/main/resources/zou.json"), StandardCharsets.UTF_8); 		} 		catch (IOException e) {   			throw new RuntimeException(e); 		} 		StringBuilder sb = new StringBuilder(); 		for (String line : lines) {   			sb.append(line); 		} 		return sb.toString(); 	}  	private void processNestMap(String prefix, Map result, Map fileMap) {   		if (prefix.length() > 0) {   			prefix += "."; 		} 		for (Map.Entry entrySet : fileMap.entrySet()) {   			if (entrySet.getValue() instanceof Map) {   				processNestMap(prefix + entrySet.getKey(), result, (Map) entrySet.getValue()); 			} 			else {   				result.put(prefix + entrySet.getKey(), entrySet.getValue()); 			} 		} 	}  }2.3 自定义配置Bean config@Configuration(proxyBeanMethods = false) public class ZouConfiguration {    	@Bean 	public ZouJsonPropertySourceLocator zouJsonPropertySourceLocator(){   		return new ZouJsonPropertySourceLocator(); 	} }2.4 定义BootstrapConfiguration配置
  在   resources   添加  spring.factories   配置文件 org.springframework.cloud.bootstrap.BootstrapConfiguration= com.zou.config.ZouConfiguration3. 测试
  这里简单定义一个我们自己的配置文件   zou.json
  {     "name": "xiaozou" }
  定义一个测试controller  @RestController @RequestMapping("test/v1") public class ZouController {   	@Autowired     Environment environment;      @Value("${name:1}")     private String name;      @GetMapping("/name")     public String env(){           System.out.println(name);         return environment.getProperty("name");     } }
  可以看到我们自定义配置是生效了的
  Spring Cloud 整合自定义配置还是比较容易的,核心还是自定义一个   ZouJsonPropertySourceLocator   然后加载  PropertySource   到Spring中。这里我们整合的是本地文件,其实如果要整合远程配置中心也是类似的,只不过获取文件就不是读取本地配置文件,而是通过http读取远程配置文件然后构造出一个  PropertySource   放入Spring容器中。后续有机会我们对  nacos   整合  Spring Cloud   源码进行分析

日本行游影记(16)大阪此行日本本岛,大阪是最后一站,了解一点日本历史的人,都对大阪这个名字不陌生,1995年1月17日,在大阪神户发生的强烈阪神大地震,会让人们都记住大阪这个名字。大阪是日本历史上最大的字母哥今日得到34分,在生涯得分榜上超越安东尼戴维斯NBA常规赛雄鹿主场对阵老鹰的比赛已经结束,全场战罢,雄鹿123115战胜老鹰。雄鹿球员扬尼斯阿德托昆博全场出战32分钟,22投11中,三分1中1,得到34分17板4助攻。数据统计日本民众过节式庆祝大熊猫到来50周年10月28日,游客在日本东京上野动物园观看大熊猫新华社电我去过23个国家和地区看大熊猫50年前为了看大熊猫我专门请假我做梦梦见的都是大熊猫如果不是与一大早就来东京上野动物园排队购买从猪八戒网第三次冲刺上市说起,重庆发展为什么不行重庆,中国内陆唯一直辖市,全国新一线城市。重庆要打造西部金融中心,是中国经济第四极的一大极核,更在培育国际消费中心城市。但直辖25年来,重庆发展究竟如何?本财经十万加博主认为并不足AR智能眼镜交互设计研究AR眼镜交互形式可以分为外接设备和自然交互,本文作者从这两个方面,对这些交互形式的特点和应用场景进行了分析,并预测未来AR眼镜交互形式将会往哪个方向发展,一起来看一下吧。AR眼镜交网约车纪实奇葩的女乘客,遇到这种的肺都能气炸了真的是社会百态,人才尽出啊,干网约车这个行业真的是各种奇葩人奇葩事儿都能遇到。难道某猪平台打车的人素质都这么低吗(仅针对于部分人)?我接了一单某猪给的单子,按照约定的地点到达,然后马龙险胜林昀儒,决胜局大爆发,孙颖莎轻松击败石川佳纯WTT世界杯总决赛男单第二轮,国乒选手马龙32险胜林昀儒。这场比赛虽然马龙也陷入了大比分落后的状态,但总是能够通过主动进攻将比分追上来。特别是到了决胜局,马龙正手进攻压制了林昀儒的莎头CP会师巅峰!孙颖莎王楚钦连续夺冠,颁奖合影跑了太搞笑WTT世界杯决赛正式落下帷幕,在压轴大戏男单决赛中,王楚钦42逆转复仇张本智和,加冕世界杯男单冠军。夺得冠军之后,王楚钦不仅世界大赛连续夺冠,同时还拿下了1500个积分和55000刘国梁重大细节,宣布孙颖莎上位!7天双冠22天3冠,她的时代来了北京时间10月30日,孙颖莎43战胜陈梦夺冠,女单新一姐当之无愧。在WTT新乡年终总决赛的决赛舞台上,孙颖莎43险胜陈梦,终于跨越了自己最大的心魔和克星。自从陈梦崛起之后,孙颖莎已有谁注意到孙颖莎的世界排名积分飙升!国乒5朵金花独领风骚国际乒联公布了最新的女单世界排名,凭借背靠背连续获得澳门赛和世界杯两站冠军,孙颖莎收获2500的积分,总积分已经高达8270分,直接甩开排名第二的陈梦1555分。要知道,陈梦曾几何31完胜!中超分水岭一战!卫冕冠军抹平劣势,争冠天平开始倾斜2022赛季中超联赛的赛程已经来到了三分之二,争冠已经进入到白热化阶段,山东泰山和武汉三镇争夺愈发激烈,一场比赛的胜负都可能让形势发生反转。在这个节骨眼上,山东泰山迎来了一场关键战
首钢新主帅人选出炉,马布里续约合同添新条款,上海内线遭遇危机文小桢CBA季后赛爆出大冷门,坐拥四外援的北京首钢再次不敌单外援的吉林男篮,以大比分02惨遭淘汰出局,遭遇季后赛一轮游。赛后,首钢俱乐部官方社媒仅用对不起三个字向球迷们表示了态度,雅尼斯将启用首钢悍将,徐长锁换人做最后一搏,青岛已签约新外援文小桢CBA季后赛第二个比赛日爆出了一个不大不小的冷门,坐拥四外援赛前高喊争冠呼声的北京首钢,被单外援仅七人轮换的吉林男篮绝杀,遭遇开门黑,如果下一场不能赢球的话,那北京首钢将被横你的小伙伴,一起过春天气温一路走高,百花盛放景色让人流连忘返摄影师淡淡美好在樱花树下,看见了春天笑容太美,青春太美。在晴川酒店,淡淡美好抢拍下这张照片,她生活中也非常爱拍照,几乎天天都会分享作品到大武汉麻辣烫商用配方分享给大家麻辣烫起源于岷江之滨四川省乐山市牛华镇。最初是船工和纤夫创造了麻辣烫这种简便易行而又独特的吃法。后经东北做法改良之后流行于各地的汉族特色小吃。经过东北人改良过的麻辣烫,大骨汤底,更哪些是你心心念念想去的地方?云南有太多想去且值得去的地方啦,不仅风景美,而且景点多,可以来一个景点大串烧,观看体会各种美色美食,也省去了路上花费过多时间香格里拉,大理洱海,丽江,玉龙雪山,丽江泸沽湖,还有独具不出京不远行,这些地方也能让清明小长假很充实清明前后,是初暖花开万物复苏的好时节,踏青赏花换新衣已经成为了朋友圈的热门话题。今年的第一个小长假,在不出京的前提下,还能避开人头涌动的打卡景点,这一份小长假逛街攻略,商业那点事儿清明节适合旅游的地方,中国最美的寨子,确实好看有很多的朋友咨询清明节还可以去哪里游玩,今天再给大家介绍一个适合旅游的地方,中国最美的寨子,这里的每处寨子都风格各异,各具特色,这里的每一处建筑都有千百年的历史,这里的每一处人文景经常吃烧烤对身体有什么影响?现在有不少人在聚会的时候会一起聚会吃烧烤,烧烤的味道是比较鲜美的,受很多人的欢迎,但是长期吃烧烤,对人体健康有不利影响,大家都知道吸烟有害人体健康,长时间的吸烟会严重的影响人体各个亚马逊全球开店需要投入多少钱?做生意,怎么能不关心成本!下面以北美站为例,来看看亚马逊平台开店都涉及到哪些基本费用。一月租费专业卖家39。39美元月个人卖家无月租费用可以看出,月租主要针对专业卖家,无月租也是个华为更换最高领导人,孟晚舟即将接班华为官网最新消息,2022年4月1日2022年9月30日期间由胡厚崑先生当值轮值董事长,华为公司董事会及董事会常务委员会由轮值董事长主持,轮值董事长在当值期间是公司最高领袖,轮值董腾讯元老魏震赚够钱后果断辞职,携妻儿退隐山林,每天种地喝茶在智能手机还没有普及的年代,电脑使95后孩子们的童年增彩。当时是中国网络发展最快,也是变革最大的时代,中国赶上了这一次科技革命的浪潮,在2000年之后,五光十色的网络让人们第1次那