SpringCloud中⽂⽂档
Cloud 官⽅⽂档
Spring Cloud为开发⼈员提供了⽤于快速构建系统中某些常见模式的⼯具(例如,配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调产⽣了样板模式,并且使⽤Spring云开发⼈员可以快速⽀持实现这些模式的服务和应⽤程序。它们可以在任何分布式环境中正常⼯作,包括开发⼈员⾃⼰的笔记本电脑,裸机数据中⼼和受管理的平台,例如Cloud Foundry。
版本:Greenwich.SR5
1.特点
Spring Cloud专注于为典型的⽤例和扩展机制提供良好的开箱即⽤体验,以涵盖其他情况。
分布式/版本化配置
服务注册和发现
路由
服务到服务的呼叫
负载均衡
断路器
分布式消息传递
第⼀部分:云原⽣应⽤程序
是⼀种应⽤程序开发风格,可⿎励在持续交付和价值驱动型开发领域轻松采⽤最佳实践。⼀个相关的学科是构建,其中开发实践与交付和运营⽬标保持⼀致,例如,通过使⽤声明性编程,管理和监视。Spring Cloud通过多种特定⽅式促进了这些发展⽅式。起点是⼀组功能,分布式系统中的所有组件都需要轻松访问这些功能。
其中Spring Cloud建⽴在上,涵盖了许多这些功能。Spring Cloud作为两个库提供了更多功能:Spring Cloud上下⽂和Spring Cloud Commons。Spring Cloud上下⽂为Spring Cloud应⽤程序的ApplicationContext提供了实⽤程序和(引导上下⽂,加密,刷新作⽤域和环境端点)。Spring Cloud Commons是在不同的Spring Cloud实现中使⽤的⼀组抽象和通⽤类(例如Spring Cloud Netflix和Spring Cloud Consul)。
如果由于“密钥⼤⼩⾮法”⽽导致异常,并且使⽤Sun的JDK,则需要安装Java密码术扩展(JCE)⽆限强度管辖权策略⽂件。有关更多信息,请参见以下链接:
将⽂件解压缩到您使⽤的JRE / JDK x64 / x86版本的JDK / jre / lib / security⽂件夹中。
Spring Cloud是根据⾮限制性Apache 2.0许可证发⾏的。如果您想为⽂档的这⼀部分做出贡献或发现错误,可以在到源代码和项⽬跟踪⼯具。2. Spring Cloud上下⽂:应⽤程序上下⽂服务
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
Spring Boot对于如何使⽤Spring来构建应⽤程序有⾃⼰的看法。例如,它具有⽤于公共配置⽂件的常规位置,并具有⽤于公共管理和监视任务的端点。Spring Cloud以此为基础,并添加了⼀些功能,可能系统中的所有组件都将使⽤或偶尔需要这些功能。
2.1 Bootstrap 应⽤程序上下⽂
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
springboot结构
Spring Cloud应⽤程序通过创建“ bootstrap ”上下⽂来运⾏,该上下⽂是主应⽤程序的⽗上下⽂。它负责从外部源加载配置属性,并负责解密本地外部配置⽂件中的属性。这两个上下⽂共享⼀个Environment ,它是任何Spring应⽤程序的外部属性的来源。默认情况下,引导程序属性(不是bootstrap.properties ,⽽是引导程序阶段加载的属性)具有较⾼的优先级,因此它们不能被本地配置覆盖。引导上下⽂使⽤与主应⽤程序上下⽂不同的约定来定位外部配置。可以使⽤l 来代替l (或.properties ),⽽将引导程序和外部环境的外部配置很好地分开。以下清单显⽰了⼀个⽰例:
如果您的应⽤程序需要来⾃服务器的任何特定于应⽤程序的配置,则最好设置spring.application.name (在l 或l 中)。为了将属性spring.application.name ⽤作应⽤程序的上下⽂ID,必须在bootstrap.[properties | yml]中进⾏设置。
如果要检索特定的配置⽂件配置,还应该在bootstrap.[properties | yml]中设置spring.profiles.active 。
您可以通过设置spring.abled=false 来完全禁⽤引导过程(例如,在系统属性中)。2.2应⽤程序上下⽂层次结构90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
如果从SpringApplication 或SpringApplicationBuilder 构建应⽤程序上下⽂,那么Bootstrap上下⽂将作为⽗级添加到该上下⽂。Spring的⼀个功能是⼦上下⽂从其⽗级继承属性源和配置⽂件,因此与构建没有Spring Cloud Config的相同上下⽂相⽐,“ 主 ”应⽤程序上下⽂包含其他属性源。其他属性来源是:“ bootstrap ”:如果在Bootstrap上下⽂中到任何PropertySourceLocators 并且具有⾮空属性,则会以⾼优先级显⽰可选的CompositePropertySource 。⼀个⽰例是Spring Cloud Config服务器中的属性。有关如何⾃定义此属性源内容的说明,请参见“”。
“ applicationConfig:[classpath:l] ”(以及相关⽂件,如果Spring配置⽂件处于活动状态):如果您拥有l (或.properties ),则这些属性⽤于配置Bootstrap上下⽂。然后,当它们的⽗级被设置时,它们被添加到⼦级上下⽂。它们的优先级低于l (或.properties )以及创建Spring Boot应⽤程序过程中正常添加到⼦级的任何其他属性源的优先级。有关如何⾃定义这些属性源内容的说明,请参见“ ”。由于属性源的排序规则,“ bootstrap ”条⽬优先。但是,请注意,这些不包含来⾃l 的任何数据,该数据的优先级⾮常低,但可⽤于设置默认值。您可以通过设置创建的任何ApplicationContext 的⽗上下⽂来扩展上下⽂层次结构,例如,使⽤其⾃⼰的界⾯或使⽤SpringApplicationBuilder 便捷⽅法(parent(),child()和sibling())。引导上下⽂是您⾃⼰创建的最⾼级祖先的⽗级。层次结构中的每个上下⽂都有其⾃⼰的“
bootstrap ”(可能为空)属性源,以避免⽆意间将价值从⽗辈提升到⼦孙后代。如果有配置服务器,
则层次结构中的每个上下⽂原则上也可以具有不同的spring.application.name ,因此也具有不同的远程属性源。正常的Spring应⽤程序上下⽂⾏为规则适⽤于属性解析:⼦上下⽂的属性按名称以及属性源名称覆盖⽗级属性。(如果⼦项具有与⽗项同名的属性源,则⼦项中不包括来⾃⽗项的值)。
请注意,SpringApplicationBuilder 可让您在整个层次结构中共享Environment ,但这不是默认设置。因此,同级上下⽂尤其不需要具有相同的配置⽂件或属性源,即使它们可能与其⽗级共享相同的值。
2.3更改引导程序Properties 的位置90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
spring:  application:    name: foo  cloud:    config:      uri: ${SPRING_CONFIG_URI:localhost:8888}
1
2
3
4
5
6
可以通过设置spring.cloud.bootstrap.name (默认值:bootstrap ),spring.cloud.bootstrap.location (默认值:空)
或spring.cloud.bootstrap.additional-location (默认值:空)来指定l (或.properties )位置。 —例如,在系统属性中。这些属性的⾏为类似于具有相同名称的fig.*变体。使⽤spring.cloud.bootstrap.location 将替换默认位置,并且仅使⽤指定的位置。要将位置添加到默认位置列表中,可以使⽤spring.cloud.bootstrap.additional-location 。实际上,它们是通过在引导程序Environment 中设置这些属性来设置引导程序ApplicationContext 的。如果存在有效的配置⽂件(通过spring.profiles.active 或通过您正在构建的上下⽂中的Environment  API),该配置⽂件中的属性也会被加载,这与常规Spring Boot应⽤程序中的加载情况相同-例如,从bootstrap-development.properties 中获取development 个⼈资料。
2.4覆盖远程Properties 的值
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
通过引导上下⽂添加到应⽤程序中的属性源通常是“ 远程的 ”(例如,来⾃Spring Cloud Config Server)。默认情况下,不能在本地覆盖它们。如果要让您的应⽤程序使⽤其⾃⼰的系统属性或配置⽂件覆盖远程属性,则远程属性源必须通过设
置fig.allowOverride=true 来授予其权限(在本地设置⽆效)。设置该标志后,将使⽤两个更细粒度的设置来控制远程属性相对于系统属性和应⽤程序本地配置的位置:
fig.overrideNone=true :从任何本地属性源覆盖。
fig.overrideSystemProperties=false :只有系统属性,命令⾏参数和环境变量(⽽不是本地配置⽂件)才应覆盖远程设置。
2.5⾃定义Bootstrap 配置
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
通过将项添加到名为org.springframework.cloud.bootstrap.BootstrapConfiguration 的项下的/META-INF/spring.factories 中,可以将引导上下⽂设置为执⾏您喜欢的任何操作。它包含⽤于创建上下⽂的Spring @Configuration 类的逗号分隔列表。您可以在此处创建要⽤于主应⽤程序上下⽂进⾏⾃动装配
的任何beans。@Beans 类型为ApplicationContextInitializer 的特殊合同。如果要控制启动顺序,则可以⽤@Order 批注标记类(默认顺序为last )。
当添加⾃定义BootstrapConfiguration ,⼩⼼你添加类不是@ComponentScanned 错误地进⼊你的“ 主 ”应⽤程序上下⽂,这⾥可能并不需要它们。为引
导配置类使⽤单独的程序包名称,并确保@ComponentScan 或带注释的配置类@SpringBootApplication 尚未包含该名称。
引导过程结束时,将初始化程序注⼊到主要的SpringApplication 实例中(这是正常的Spring Boot启动顺序,⽆论它是作为独⽴应⽤程序运⾏还是部署在应⽤程序服务器中)。⾸先,从spring.factories 中到的类创建引导上下⽂。然后,在启动之前,将类型
为ApplicationContextInitializer 的所有@Beans 添加到主SpringApplication 。
2.6⾃定义引导程序Property 源
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
引导过程添加的外部配置的默认属性来源是Spring Cloud Config服务器,但是您可以通过将类型PropertySourceLocator 的beans添加到引导上下⽂(通过spring.factories )来添加其他来源。例如,您可以从其他服务器或数据库插⼊其他属性。
例如,请考虑以下定制定位器:
@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"));    }}
1
2
3
4
5
6
7
8
9
10
传⼊的Environment 是即将创建的ApplicationContext 的那个,换句话说,就是我们为其提供其他属性源的那个。它已经有其正常的Spring Boot提供的属性源,因此您可以使⽤这些属性来定位特定于此Environment 的属性源(例如,通过在spring.application.name 上键⼊它,这与默认设置相同)。 Spring Cloud Config服务器属性源定位符)。如果您创建⼀个包含此类的jar,然后添加包含以下内容的META-INF/spring.factories ,则customProperty  PropertySource 会出现在任何在其类路径中包含该jar的应⽤程序中:
2.7
⽇志配置90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时
免费领取。如果要使⽤Spring Boot来配置⽇志设置,则应将此配置放在`bootstrap。[yml | 属性](如果您希望将其应⽤于所有事件)。
为了使Spring Cloud正确初始化⽇志记录配置,您不能使⽤⾃定义前缀。例如,初始化记录系统时,Spring Cloud⽆法识别使⽤custom.loggin.logpath 。
2.8环境变化
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。应⽤程序侦听EnvironmentChangeEvent 并以⼏种标准⽅式对更改做出反应(⽤户可以通过常规⽅式将其他ApplicationListeners 作为@Beans 添加)。观察到EnvironmentChangeEvent 时,它会列出已更改的键值,并且应⽤程序将这些键值⽤于:重新绑定上下⽂中的任何@ConfigurationProperties  beans
为logging.level.*中的所有属性设置记录器级别
请注意,默认情况下,Config Client不轮询Environment 中的更改。通常,我们不建议您使⽤这种⽅法来检测更改(尽管您可以使⽤@Scheduled 注释对其进⾏设置)。如果您具有横向扩展的客户端应⽤
程序,则最好向所有实例⼴播EnvironmentChangeEvent ,⽽不是让它们轮询更改(例如,使⽤)。只要您可以实际更改Environment 并发布事件,EnvironmentChangeEvent 就涵盖了⼀⼤类刷新⽤例。请注意,这些API是公共的,并且是核⼼Spring的⼀部分)。您可以通过访问/configprops 端点(正常的Spring Boot Actuator功能)来验证更改是否绑定
到@ConfigurationProperties  beans。例如,DataSource 可以在运⾏时更改其maxPoolSize (由Spring Boot创建的默认DataSource 是@ConfigurationProperties  bean)并动态地增加容量。重新绑定@ConfigurationProperties 并不涵盖另⼀类⽤例,在这种情况下,您需要对刷新有更多的控制,并且需要对整个ApplicationContext 进⾏原⼦更改。为了解决这些问题,我们有
@RefreshScope 。
2.9刷新范围
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
进⾏配置更改时,标记为@RefreshScope 的Spring @Bean 将得到特殊处理。此功能解决了状态beans的问题,该状态仅在初始化时才注⼊配置。例如,如果通过Environment 更改数据库URL时Dat
aSource 具有打开的连接,则您可能希望这些连接的持有者能够完成他们正在做的事情。然后,下次某物从池中借⽤⼀个连接时,它将获得⼀个具有新URL的连接。
有时,甚⾄可能必须将@RefreshScope 批注应⽤到只能初始化⼀次的某些beans上。如果bean是“不可变的”,则必须⽤@RefreshScope 注释bean或在属性键a-refreshable 下指定类名。
如果您⾃⼰创建⼀个DataSource  bean,⽽实现是⼀个HikariDataSource ,则返回最特定的类型,在这种情况下为HikariDataSource 。否则,您将
需要设置a-refreshable=javax.sql.DataSource 。
org.springframework.cloud.bootstrap.BootstrapConfiguration=sample.custom.CustomPropertySourceLocator
1
刷新作⽤域beans是惰性代理,它们在使⽤时(即在调⽤⽅法时)进⾏初始化,并且作⽤域充当初始化值的缓存。若要强制bean在下⼀个⽅法调⽤上重新初始化,必须使它的缓存条⽬⽆效。
RefreshScope 在上下⽂中是bean,并具有公⽤的refreshAll()⽅法,可通过清除⽬标缓存来刷新作⽤域中的所有beans。/refresh 端点公开了此功能(通过HTTP或JMX)。要按名称刷新单个bean,还有⼀个refresh(String)⽅法。要公开/refresh
端点,您需要在应⽤程序中添加以下配置:@RefreshScope 在@Configuration 类上(在技术上)有效,但是可能会导致令⼈惊讶的⾏为。例如,这并不意味着该类中定义的所有@Beans 本⾝都在@RefreshScope 中。具体⽽⾔,除⾮刷新本⾝在@RefreshScope 中,否则依赖那些beans的任何内容都不能依赖于刷新启动时对其进⾏更新。在这种
情况下,将在刷新时重建它,并重新注⼊其依赖项。此时,它们将从刷新的@Configuration 重新初始化。
2.10加密和解密
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。
Spring Cloud具有Environment 预处理器,⽤于在本地解密属性值。它遵循与Config Server相同的规则,并且通过encrypt.*具有相同的外部配置。因此,您可以使⽤{cipher}*形式的加密值,并且只要存在有效密钥,就可以在主应⽤程序上下⽂获得Environment 设置之前对它们进⾏解密。要在应⽤程序中使⽤加密功能,您需要在类路径中包含Spring Security RSA(Maven坐标:“
org.springframework.security:spring-security-rsa”),并且还需要JVM中的全功能JCE扩展。如果由于“密钥⼤⼩⾮法”⽽导致异常,并且使⽤Sun的JDK,则需要安装Java密码术扩展(JCE)⽆限强度管辖权策略⽂件。有关更多信息,请参见以下链接:
将⽂件解压缩到您使⽤的JRE / JDK x64 / x86版本的JDK / jre / lib / security⽂件夹中。2.11端点
90%⾼可⽤的千亿级微服务架构之道深⼊学习⼀线⼤⼚必备微服务架构技术。VIP 教程限时免费领取。对于Spring Boot Actuator应⽤程序,可以使⽤⼀些其他管理端点。您可以使⽤:
从POST 到/actuator/env 以更新Environment 并重新绑定@ConfigurationProperties 和⽇志级别。
/actuator/refresh 重新加载引导上下⽂并刷新@RefreshScope  beans。/actuator/restart 关闭ApplicationContext 并重新启动(默认情况下禁⽤)。
/actuator/pause
和/actuator/resume ⽤于调⽤Lifecycle ⽅法(ApplicationContext 中的stop()和start())。
如果禁⽤/actuator/restart 端点,则/actuator/pause 和/actuator/resume 端点也将被禁⽤,因为它们只是/actuator/restart 的特例。management:  endpoints:    web:      exposure:        include: refresh
1
2
3
4
5

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。