• 沒有找到結果。

使用Spring Cloud Huawei接入CSE主要步骤可以归纳为如下两个步骤:

1. 增加/修改组件依赖。

2. 在配置文件“boostrap.yaml”中增加CSE配置信息。

具体操作,请参考Spring Cloud接入CSE。本章节补充在实际改造过程中需要注意的 一些事项,特别是组件依赖有关的注意事项。

假设原来的业务系统都是基于Maven的项目。

第一步:熟悉原业务系统 pom 结构

Spring Cloud应用系统的pom结构一般分三种:

● 第一种使用Spring Boot或者Spring Cloud提供的公共pom作为parent,例如:

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.3.5.RELEASE</version>

</parent>

或者:

<parent>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-build</artifactId>

<version>2.2.3.RELEASE</version>

</parent>

● 第二种使用项目本身的parent,不使用Spring Boot或者Spring Cloud提供的公共 pom作为parent。但是在项目中,通过dependency management引入了依赖管 理,例如:

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>${spring-cloud.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

● 还有些应用系统会混合使用第一种和第二种,既使用了Spring Boot或者Spring Cloud提供的公共pom作为parent,又通过dependency management引入了依赖 管理。

第二步:修改 parent 和 dependency management 避免三方软件冲突

parent和dependency management的修改是避免三方软件冲突的关键步骤。

1. 首先确定选用的Spring Cloud Huawei的版本,然后查询Spring Cloud Huawei版 本对应的Spring Boot版本和Spring Cloud版本。Spring Cloud Huawei一般建议使 用当前最新版本,配套的Spring Boot版本和Spring Cloud版本可以在Spring Cloud Huawei官网查询。

2. 比对当前项目parent的版本与Spring Cloud Huawei配套的Spring Boot版本和 Spring Cloud版本,如果当前项目的parent版本比较低,修改为Spring Cloud Huawei的版本;如果当前版本的parent版本比较高,则无需修改。

3. 在当前项目的dependency management中独立引入Spring Boot、Spring Cloud、Spring Cloud Huawei的依赖管理。如果原来项目的Spring Boot或者 Spring Cloud版本比较高,使用原来项目的版本;如果原来项目的版本比较低,

则使用Spring Cloud Huawei的版本。需要注意依赖管理的顺序,排在前面的依赖 管理会优先使用。Spring Boot、Spring Cloud的版本是基础,被这两个依赖关系 管理的软件,建议都不提供额外的依赖管理,跟随社区的版本,可以有效减少冲 突。这里之所以把3个依赖关系独立出来引入,是为了给以后独立升级其中一个组 件提供便利。

<dependencyManagement>

<dependencies>

<!-- configure user spring cloud / spring boot versions -->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-dependencies</artifactId>

<version>${spring-boot.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-dependencies</artifactId>

<version>${spring-cloud.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<!-- configure spring cloud huawei version -->

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-huawei-bom</artifactId>

<version>${spring-cloud-huawei.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

如果业务系统集成了Spring Cloud Alibaba等依赖关系,在dependency management删除;一些已经被Spring Boot、Spring Cloud管理的不必要的依 赖,也建议删除。常见的需要删除的依赖管理有:

<dependencyManagement>

<dependencies>

<!-- 第三方扩展的依赖 -->

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-alibaba-dependencies</artifactId>

<version>2.1.0.RELEASE</version>

<type>pom</type>

<scope>import</scope>

</dependency>

<!-- 已经被Spring Cloud管理的依赖 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-feign</artifactId>

<version>1.4.7.RELEASE</version>

</dependency>

</dependencies>

</dependencyManagement>

第三步:添加/删除依赖

添加的是服务注册发现、集中配置管理、服务治理相关的组件,删除的也是这些组件 的第三方实现。这些功能以外的其他组件不需要变化,但需要关注Spring Boot、

Spring Cloud版本升级后,这些软件可能需要配套升级。兼容性的问题通常会在编译 阶段或者服务启动阶段发现。

添加依赖一般不指定版本号,把版本号交给parent和dependency management管理。

在微服务应用中引入:

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-service-engine</artifactId>

</dependency>

在 Spring Cloud Gateway应用中引入:

<dependency>

<groupId>com.huaweicloud</groupId>

<artifactId>spring-cloud-starter-huawei-service-engine-gateway</artifactId>

</dependency>

如果存在下面这些依赖,需要删除:

<!-- nacos场景 -->

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.csp</groupId>

<artifactId>spring-cloud-gateway-starter-ahas-sentinel</artifactId>

</dependency>

<dependency>

<groupId>com.alibaba.csp</groupId>

<artifactId>spring-boot-starter-ahas-sentinel-client</artifactId>

</dependency>

<!-- eureka场景 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>

</dependency>

通常下面的一些依赖,不需要删除:

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>1.0.28</version>

</dependency>

主要的开源社区,例如Spring Boot、Spring Cloud等都会维护多个版本分支。以 Spring Cloud为例,存在Hoxton、Greenwich、2020.0.x等分支,其中大部分分支都已 经停止维护。开源软件多数维护的分支存在两个:一个为最新版本的开发分支;一个

相關文件