欢迎访问Spring Cloud中国社区

《重新定义Spring Cloud实战》由Spring Cloud中国社区倾力打造,基于Spring Cloud的Finchley.RELEASE版本,本书内容宽度足够广、深度足够深,而且立足于生产实践,直接从生产实践出发,包含大量生产实践的配置。欢迎加微信Software_King进群答疑,国内谁在使用Spring Cloud?欢迎登记

Spring Cloud Greenwich 新特性和F升级分享

冷冷 · 6月前 · 2963 ·

2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以下为总结,希望对你使用Spring Cloud Greenwich 有所帮助
Greenwich 只支持 Spring Boot 2.1.x 分支。如果使用 2.0.x 请使用Finchley版本,

pom坐标

主要是适配JAVA11

  1. <!--支持Spring Boot 2.1.X-->
  2. <dependency>
  3. <groupId>org.springframework.boot</groupId>
  4. <artifactId>spring-boot-dependencies</artifactId>
  5. <version>2.1.2.RELEASE</version>
  6. <type>pom</type>
  7. <scope>import</scope>
  8. </dependency>
  9. <!--Greenwich.RELEASE-->
  10. <dependency>
  11. <groupId>org.springframework.cloud</groupId>
  12. <artifactId>spring-cloud-dependencies</artifactId>
  13. <version>Greenwich.RELEASE</version>
  14. <type>pom</type>
  15. <scope>import</scope>
  16. </dependency>

升级netflix版本,DiscoveryClient支持获取InstanceId

image

Spring Cloud Config 提供了新的存储介质

除了Git、File、JDBC,新版本提供 在Cloud Foundry的CredHub存储功能

  1. spring:
  2. profiles:
  3. active: credhub
  4. cloud:
  5. config:
  6. server:
  7. credhub:
  8. url: https://credhub:8844

Spring Cloud Gateway

支持整合OAuth2

这里提供了一个例子: Spring Cloud Gateway and Spring Security OAuth2

整合的时候有个坑可以参考这个issue:ReactiveManagementWebSecurityAutoConfiguration Prevent’s oauth2Login from being defaulted

新增重写响应头过滤器

  1. spring:
  2. cloud:
  3. gateway:
  4. routes:
  5. - id: rewriteresponseheader_route
  6. uri: http://example.org
  7. filters:
  8. - RewriteResponseHeader=X-Response-Foo, , password=[^&]+, password=***

Feign 的新特性和坑

@SpringQueryMap 对Get请求进行了增强

  1. 终于解决这个问题了
  2. 不用直接使用OpenFeign新增的@QueryMap,由于缺少value属性 QueryMap注释与Spring不兼容…

异常解决

对Spring Cloud Finchley 进行直接升级时候发现feign启动报错了

  1. ***************************
  2. APPLICATION FAILED TO START
  3. ***************************
  4. Description:
  5. The bean 'pigx-upms-biz.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
  6. Action:
  7. Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
  8. Process finished with exit code 1
  1. 第一种粗暴的解决方法,异常日志中说明了,在 bootstrap.yml中配置

    1. spring.main.allow-bean-definition-overriding=true

    这是Spring Boot 2.1 后新增的属性运行bean 覆盖,不要配置到配置中心里面,不然无效

  2. 第二种,就是把通过同一个服务调用的代码,移动到同一个@FeignClient

  3. contextId ,这个是@FeignClient 新增的一个属性
    ```
    This will be used as the bean name instead of name if present, but will not be used as a service id.

```
就可以用这个属性区分@FeigenClient 标志的同一个service 的接口

总结

  1. Spring Cloud F — > G 变化很小,微乎其微主要是JAVA11的兼容
  2. 很遗憾没有看到 Spring Cloud Alibaba 加油。
  3. Spring Cloud LoadBalancer 还是老样子。目前来看暂时无法替代 ribbon
  4. 欢迎加我Q2270033969,讨论Spring Cloud ^_^