首页 > 其他分享 >配置中心(脱离bootstrap.yml)

配置中心(脱离bootstrap.yml)

时间:2023-10-28 13:23:10浏览次数:31  
标签:配置 spring 脱离 bootstrap nacos config yml cloud

前言

Spring Boot 2.4.0对于环境属性加载进行了重写,废弃了ConfigFileApplicationListener类,而使用了新的ConfigDataEnvironmentPostProcessor来加载属性配置。而且还引入了spring.config.import属性用于导入外部配置,因此Spring Cloud也默认不再创建bootstrap上下文,配置中心可以使用srping.config.import机制来加载属性。

使用

老的方式

如果仍要用bootstrap.yml方式来使用配置中心,需要引入以下依赖

<!-- 开启bootstrap上下文 -->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

BootstrapApplicationListener.java

public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
    ConfigurableEnvironment environment = event.getEnvironment();
    // 开关没有开启并且也没有使用老的方式(ConfigFileApplicationListener)来加载配置
    if (!bootstrapEnabled(environment) && !useLegacyProcessing(environment)) {
        return;
    }
    // 创建bootstrap上下文
}

public static boolean bootstrapEnabled(Environment environment) {
		return environment.getProperty(BOOTSTRAP_ENABLED_PROPERTY, Boolean.class, false) || MARKER_CLASS_EXISTS;
}

引入上面依赖实则就是导入一个标记类,这个标记类存在则满足条件,或者在JVM启动参数设置开关为true

spring.cloud.bootstrap.enabled=true,注意不能写到application.yml文件中,因为此时还没加载呀。

新的方式

application.yml

spring:
  application:
    name: nacos-config
  config:
    import: nacos:/nacos-config.yml
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml

上述就是导入namespace=public,group=DEFAULT_GROUP,dataId=nacos-config.yml的配置。

导入url还可以携带参数,如nacos:/nacos-config.yml?group=xxx&refreshEnabled=false。

参数可以覆盖全局指定的值。

spring.config.import可以导入多个配置,如下所示

spring:
  config:
    import:
     - nacos:/nacos-config.yml
     - nacos:/test

全局参数

  • namespace: spring.cloud.nacos.config.namespace指定,默认为空,即public
  • group: spring.cloud.nacos.config.group指定,默认DEFAULT_GROUP,可以被导入url中group参数覆盖
  • fileExtension: spring.cloud.nacos.config.fileExtension,默认为properties,如果dataId携带后缀,则使用dataId中的后缀
  • refresh: spring.cloud.nacos.config.refreshEnabled指定,默认为true,可以被导入url中refreshEnabled参数覆盖

注意的点

  • 与老的方式比,默认不会自动去加载dataId为服务名称的配置,必须使用spring.config.import明确指定。
  • nacos目前不会自动去拼接profile信息,即如果当前激活的profile是dev,不会去加载nacos-config-dev.yml。
  • 顺序性,import进来的配置仅仅位于application.yml之前,也就是优先级高于application.yml,而老的方式会把配置挪到最前面。

简要原理

引入以下几个组件

  • ConfigDataLocation,代表配置的位置,一个字符串表示
  • ConfigDataResource,代表具体配置
  • ConfigDataLocationResolver,用于把ConfigDataLocation指定的配置解析成对应的ConfigDataResource
  • ConfigDataLoader,用于把ConfigDataResource加载成具体的PropertySource

因此路径写法可以参考ConfigDataLocationResolver类中的解析。

标签:配置,spring,脱离,bootstrap,nacos,config,yml,cloud
From: https://www.cnblogs.com/wt20/p/17794003.html

相关文章

  • BootstrapBlazor组件库,Table组件导出数据到剪切板
    BootstrapBlazor组件库,Table组件导出数据到剪切板解决方案使用ClipboardService将Table数据导出到剪切板中,并且可以直接粘贴到Excel。这里我直接采用ExportButtonDropdownTemplate添加了2个新的导出选项,一个是导出当前页,一个是导出所有页。Razor代码<TableTItem="Foo"......
  • BootstrapBlazor组件库,Clipboard剪切板服务
    BootstrapBlazor组件库,Clipboard剪切板服务组件介绍本Blazor组件依赖于BootstrapBlazor组件库。使用该组件之前需要先安装BootstrapBlazor组件库。可以通过nuget命令行安装dotnetaddpackageBootstrapBlazor--version7.x或者双击项目名称直接添加ItemGroup<ItemGroup......
  • 直播app系统源码,bootstrap5 text左对齐右对齐
    直播app系统源码,bootstrap5text左对齐右对齐在bootstrap4中text左/右对齐   <h1class="text-right">右对齐</h1>  <h1class="text-left">左对齐</h1>  <h1class="text-center">居中</h1> ​看了下官网在bootstrap5中就不起作用了换成t......
  • 正确配置bootstrap解决NN-SVG无法正常使用
    最近在学习深度学习相关内容,正好在找能绘制模型图的工具,看到很多人都推荐NN-SVG,就去尝试了一下,结果并没法正常使用,页面打开后变成了这样: 按下F12会发现报错: 这是由于网页使用了bootstrap,但是国内的网络远程引用时出错,所以导致页面内容没有完全加载,因此也就没法正常使用了。......
  • swagger配置后,系统无法启动,报Failed to start bean 'documentationPluginsBootstrappe
    swagger与springboot版本不兼容解决方案:1.swagger依赖版本过高,可以降低版本。2.在swagger配置类的application.yml配置文件中添加如下内容:spring:mvc:pathmatch:matching-strategy:ant_path_matcher我使用的方法二,完美解决。......
  • Django配置静态文件方法(static)——导入jQuery和bootstrap
    1、首先在文件夹下创建static文件夹,并将导入文件下载并放入如图: 2、进入settings.py文件夹书写静态文件配置代码:#静态文件配置STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),] 3、进入前端页面书写如下代码载入:{%loadstatic%}<linkrel="sty......
  • 为ModelForm自动生成的input框添加BootStrap样式
    为了方便管理,我们在/app01/utils下新建bootstrap.pyfromdjangoimportformsclassBootStrapModelForm(forms.ModelForm):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)#循环找到所有的插件,添加class="form-control"样......
  • BootStrapt iCheck表单美化插件使用方法
    一、特色:1、在不同浏览器(包括ie6+)和设备上都有相同的表现—包括桌面和移动设备2、支持触摸设备—iOS、Android、BlackBerry、WindowsPhone等系统4、方便定制—用HTML和CSS即可为其设置样式(多套皮肤)5、体积小巧—gzip压缩后只有1kb6、25种参数用来......
  • css - 脱离文档流
    CSSposition定位&z-index层级1.定位position:(1).相对定位relative:元素相对定位:a.相对于元素在文档流中原本的位置定位的b.不脱离文档流c.如果不设置偏移量,元素不会发生任何变化不改变元素性质(块级/内联元素)(2).绝对定位absolute:绝对定位的元素:a.相对于最近开启......
  • BootstrapBlazor组件库,Marquee文字滚动组件
    BootstrapBlazor组件库,Marquee文字滚动组件介绍本Blazor组件依赖于BootstrapBlazor组件库。使用该组件之前需要先安装BootstrapBlazor组件库。可以通过nuget命令行安装dotnetaddpackageBootstrapBlazor--version7.x或者双击项目名称直接添加ItemGroup<ItemGroup>......