本篇文章給大家分享的是有關Nacos Config中怎么集成SpringCloud,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
10年的殷都網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網營銷的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整殷都建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯從事“殷都網站設計”,“殷都網站推廣”以來,每個客戶項目都認真落實執行。
系統集成的方式
maven包依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>0.2.1.RELEASE</version> </dependency>
2.bootstrap.properties配置文件
#nacos配置中心地址 spring.cloud.nacos.config.server-addr=10.136.15.122:8848 #默認應用名稱,配置中心中data-id 默認為name+file-extension spring.application.name=example 沒有配置情況下用name作為前綴 #spring.cloud.nacos.config.prefix #應用文件格式支持properties,yml兩種 spring.cloud.nacos.config.file-extension=properties
3.java應用代碼
package com.nacos; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping("/config") @RefreshScope public class ConfigController { @Value("${useLocalCache:false}") private boolean useLocalCache; /** * http://localhost:8080/config/get */ @RequestMapping("/get") public boolean get() { return useLocalCache; } }
package com.nacos; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class NacosConfigApplication { public static void main(String[] args) { SpringApplication.run(NacosConfigApplication.class, args); } }
4.啟動應用,nacos配置中心配置參數,訪問/config/get 結果為true ,結果配置成功
參數配置說明
#配置中心地址 spring.cloud.nacos.config.server-addr=10.136.15.122:8848 #應用名稱,非必須,如果沒有配置prefix,默認以name為前綴 #spring.application.name=example #data-id前綴 spring.cloud.nacos.config.prefix=example #文件類型,支持properties和yml兩種數據格式 spring.cloud.nacos.config.file-extension=properties #環境,可以隔離不同配置環境之間的配置,如dev,uat,pro spring.profiles.active=dev #命名空間 也是起隔離作用的,隔離不同應用這之間的作用 spring.cloud.nacos.config.namespace=c04b0cdf-91c7-470a-b6a9-423da6cc7a2b #分組起隔離同一命名空間下,不同的分組 spring.cloud.nacos.config.group=test #加載額外配置,除加載上面主配置文件外,額外加載的公有配置功能 spring.cloud.nacos.config.ext-config[0].data-id=test.properties spring.cloud.nacos.config.ext-config[0].refresh=true
部分源碼解析
NacosPropertySourceLocator類是Nacos Config的核心執行類,實現了PropertySourceLocator接口,在SpringCloud項目啟動中就會加載執行的類,具體如下
PropertySourceBootstrapConfiguration 是SpringCloud下的配置類實現了ApplicationContextInitializer接口,執行init方法,具本原因可以查詢ApplicationContextInitializer相關接口的文檔說明,代碼如下
public void initialize(ConfigurableApplicationContext applicationContext) { CompositePropertySource composite = new CompositePropertySource( BOOTSTRAP_PROPERTY_SOURCE_NAME); AnnotationAwareOrderComparator.sort(this.propertySourceLocators); boolean empty = true; ConfigurableEnvironment environment = applicationContext.getEnvironment(); for (PropertySourceLocator locator : this.propertySourceLocators) { PropertySource<?> source = null; source = locator.locate(environment); if (source == null) { continue; } logger.info("Located property source: " + source); composite.addPropertySource(source); empty = false; } if (!empty) { MutablePropertySources propertySources = environment.getPropertySources(); String logConfig = environment.resolvePlaceholders("${logging.config:}"); LogFile logFile = LogFile.get(environment); if (propertySources.contains(BOOTSTRAP_PROPERTY_SOURCE_NAME)) { propertySources.remove(BOOTSTRAP_PROPERTY_SOURCE_NAME); } insertPropertySources(propertySources, composite); reinitializeLoggingSystem(environment, logConfig, logFile); setLogLevels(applicationContext, environment); handleIncludedProfiles(environment); } }
發現最終執行的locate方法,我們查看下NacosPropertySourceLocator的locate的實現如下
public PropertySource<?> locate(Environment env) { ConfigService configService = nacosConfigProperties.configServiceInstance(); if (null == configService) { LOGGER.warn( "no instance of config service found, can't load config from nacos"); return null; } long timeout = nacosConfigProperties.getTimeout(); nacosPropertySourceBuilder = new NacosPropertySourceBuilder(configService, timeout); String name = nacosConfigProperties.getName(); /*配置的分組*/ String nacosGroup = nacosConfigProperties.getGroup(); /*配置的前綴*/ String dataIdPrefix = nacosConfigProperties.getPrefix(); if (StringUtils.isEmpty(dataIdPrefix)) { dataIdPrefix = name; } /*前綴沒有,則取spring.application.name*/ if (StringUtils.isEmpty(dataIdPrefix)) { dataIdPrefix = env.getProperty("spring.application.name"); } List<String> profiles = Arrays.asList(env.getActiveProfiles()); nacosConfigProperties.setActiveProfiles(profiles.toArray(new String[0])); String fileExtension = nacosConfigProperties.getFileExtension(); CompositePropertySource composite = new CompositePropertySource( NACOS_PROPERTY_SOURCE_NAME); loadSharedConfiguration(composite); loadExtConfiguration(composite); /*加載配置方法*/ loadApplicationConfiguration(composite, nacosGroup, dataIdPrefix, fileExtension); return composite; }
通過這個方法,大概能明白我們上面的一些配置的作用,下面再看下loadApplicationConfiguration 加載配置的方法,loadSharedConfiguration,loadExtConfiguration是加載擴展配置的方式,這里就詳細說明了
private void loadApplicationConfiguration( CompositePropertySource compositePropertySource, String nacosGroup, String dataIdPrefix, String fileExtension) { loadNacosDataIfPresent(compositePropertySource, dataIdPrefix + DOT + fileExtension, nacosGroup, fileExtension, true); for (String profile : nacosConfigProperties.getActiveProfiles()) { String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtension; loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup, fileExtension, true); } }
這里可以看到,會優先加載dateIdPrefix+DOT+fileExtension的配置,而后在加載環境的配置從而覆蓋之前的配置,這就是上面配置dev的作用
private void loadNacosDataIfPresent(final CompositePropertySource composite, final String dataId, final String group, String fileExtension, boolean isRefreshable) { if (NacosContextRefresher.loadCount.get() != 0) { NacosPropertySource ps; if (!isRefreshable) { ps = NacosPropertySourceRepository.getNacosPropertySource(dataId); } else { ps = nacosPropertySourceBuilder.build(dataId, group, fileExtension, true); } composite.addFirstPropertySource(ps); } else { NacosPropertySource ps = nacosPropertySourceBuilder.build(dataId, group, fileExtension, isRefreshable); composite.addFirstPropertySource(ps); } }
以上就是Nacos Config中怎么集成SpringCloud,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注創新互聯行業資訊頻道。
分享題目:NacosConfig中怎么集成SpringCloud
URL標題:http://m.newbst.com/article16/jegedg.html
成都網站建設公司_創新互聯,為您提供電子商務、網站設計、全網營銷推廣、網站營銷、網站建設、微信公眾號
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯