SpringCloud学习-SpringCloud上下文

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wu6660563/article/details/84837707

引导应用程序上下文

SpringCloud是创建一个Bootstrap引导来进行操作,开箱即用,负责从外部加载配置属性,包括解密本地外部配置文件中的属性,application.yml(或.properties)及bootstrap.yml共享一个Enviroment,Bootstrap的优先级高,不会被本地配置覆盖

bootstrap.yml

spring:
	application:
		name:foo

通过spring.application.name修改应用。可以通过spring.cloud.boostrap.enabled=false来完全禁用引导过程。

应用程序上下文层次结构

通过使用SpringApplication或者SpringApplicationBuilder来构建程序上下文
PropertySourceLoader类为系统加载类,有两个实现PropertiesPropertySourceLoaderYamlPropertySourceLoader

在这里插入图片描述

改变引导Properties位置

可以使用spring.cloud.bootstrap.namespring.cloud.boostrap.location指定bootstrap.yml位置,例如系统属性中,这些属性的行为类似于相同名称的spring.config.*。可以通过Environment设置引导ApplicationContext。如bootstrap-devproperties表示开发

覆盖远程Properties的值

通过引导上下文添加到应用程序的属性通常是"远程Config"。默认情况下,不能本地覆盖,除了命令外。如果允许远程覆盖,可以设置spring.cloud.config.allowOverride=true授予权限,spring.cloud.config.overrideSystemProperties=false只有系统属性和env来远程覆盖,而不是本地配置文件

自定义引导配置

可以通过在org.springframework.cloud.boostrap.BootstrapConfiguration下面添加META-INF/spring.factories来训练引导上下文来执行任何您喜欢的操作。这是用于创建上下文的Spring@Configuration的分隔列表,可以在此处创建用于自动装配的Bean,还有ApplicationContextInitializer中的@Beans的特殊注解,如果需要顺序,可以使用@Order标记

添加自定义BootstrapConfiguration,主项目不要用@CompentScanned。对于@ComponentScan@SpringBootApplication标记配置类尚未涵盖启动配置类,请使用单独的包名称

引导注入类SpringApplication,从spring.factories找到引导上下文,然后再ApplicationContextInitializer将所有的@Beans添加到SpringApplication开始之前。

自定义引导属性源

引导配置默认属性源是Config server配置中心。但是可以通过将PropertySourceLocator添加到引导上下文。

@Configuration
public class CustomPropertySourceLocator implements PropertySourceLocator {

    @Override
    public PropertySource<?> locate(Environment environment) {
        return new MapPropertySource("customProperty",
                Collections.<String, Object>singletonMap("property.from.sample.custom.source", "worked as intended"));
    }

}

传入的Environment要创建ApplicationContext中的Environment,如果是JAR的方式,需要添加一个META-INF/spring.factories

org.springframework.cloud.bootstrap.BootrapConfiguration=sample.custom.CustomPropertySourceLocator

环境变化

配置客户端不会主动轮训查找Environment的更改,通常也不建议监测更改。最好通过EnvironmentChangeEvent来广播到所有的实例,而不是轮训。

EnvironmentChangeEvent涵盖了大量的刷新用例,只要更改Environment并发布事件,就可以通过访问/configprops来验证绑定到@ConfigurationProperties 。如DataSource可以再运行过程中更改maxPoolSize,并且动态扩容,重新绑定@ConfigurationProperties,可以使用@RefreshScope来控制原子性

刷新范围

RefreshScope是一个上下文中的bean,有一个公共方法refreshAll()来清除目标中所有的bean,还有refresh(string)来按名称刷新单个bean

切入点

  • POsT到/env来更新Environment来重新绑定@ConfigurationProperties和日志级别
  • /refresh重新加载引导上下文并刷新@RefreshScopeBean
  • /restart关闭ApplicationContext并重新启动(默认是禁用的)
  • /pause/resume调用Lifecycle中的stop()start()方法

猜你喜欢

转载自blog.csdn.net/wu6660563/article/details/84837707
今日推荐