【SpringBoot】Spring Boot 单体应用升级 Spring Cloud 微服务
Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。
Spring Boot 应用升级为 Spring Cloud
Cloud Native
以下是应用升级 Spring Cloud 的完整步骤。
第一步:添加 Spring Cloud 依赖
首先,为应用添加 Spring Cloud 与 Spring Cloud Alibaba 依赖。注意根据当前应用 Spring Boot 版本选择合适的 Spring Cloud 版本,具体参见版本映射表[1]。
<properties><spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version><spring-cloud.version>2022.0.0</spring-cloud.version></properties><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><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><!-- Nacos 服务发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 服务发现:OpenFeign服务调用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 服务发现:OpenFeign服务调用 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>
以上我们添加了服务注册发现、OpenFeign 等依赖。
第二步:添加配置
在应用 application.yml 或者 application.properties 文件中增加以下配置项,设置应用名、注册中心地址。
application.yml:
spring:application:#项目名称必填,在注册中心唯一#最好和之前域名规范、kubernetes service名等保持一致(会作为调用与负载均衡依据)name: service-providercloud:nacos:discovery: #启用 spring cloud nacos discoveryserver-addr: 127.0.0.1:8848
application.properties:
#项目名称必填,在注册中心唯一#最好和之前域名规范、kubernetes service名等保持一致(会作为调用与负载均衡依据)spring.application.name=service-provider#启用 spring cloud nacos discoveryspring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第三步:启动类增加注解
启动类增加 EnableDiscoveryClient EnableFeignClients 注解,启动服务地址自动注册与发现。
@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class ProviderApplication {public static void main(String[] args) {SpringApplication.run(ProviderApplication.class, args);}}
第四步:调整服务调用方式
🔔 注意!
1. 为了保证平滑升级,请确保下游应用完成 Spring Cloud 改造并在注册中心注册服务后再进行调用方式改造。
2. RestTemplate/FeignClient 默认发起调用的 hostname (示例中的 service-provider)是对端 Spring Cloud 应用名。因此,为了保证尽可能少的改造量,改造过程中设置的应用名 spring.name=service-provider 最好和之前的命名规范保持一致。比如:
-
-
如果之前有自定义域名,则和域名定义保持一致
-
如果之前用的 Kubernetes Service,则和 Service Name 保持一致
-
1. RestTemplate 模式
为之前的 RestTemplate Bean 添加 @LoadBlanced 注解,使得 RestTemplate 接入服务发现与负载均衡:
@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
其它原有 RestTemplate 发起调用的代码保持不变,只需调整 hostname 即可,如下所示。
@RestControllerpublic class TestController {@Autowiredprivate RestTemplate restTemplate;@GetMapping(value = "/echo-rest/{str}")public String rest(@PathVariable String str) {return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);}}
2. FeignClient 模式
使用 @FeignClient 注解将 EchoService 这个接口包装成一个 FeignClient,属性 name 对应对端应用名 spring.name=service-provider。
//@FeignClient(name = "service-provider", url="http://service.example.com/")@FeignClient(name = "service-provider")public interface EchoService {@GetMapping(value = "/echo/{str}")String echo(@PathVariable("str") String str);}
将 EchoService 作为标准 bean 注入,即可对远端服务发起请求了。
@RestControllerpublic class TestController {@Autowiredprivate EchoService echoService;@GetMapping(value = "/echo-feign/{str}")public String feign(@PathVariable String str) {return echoService.echo(str);}}
3. HtClient、自定义 HTTP 访问工具等
对于使用 HttpClient 或者自行封装 http 调用工具的用户,建议统一改造为以上 1、2 两种调用模式之一。
相关文章:
【SpringBoot】Spring Boot 单体应用升级 Spring Cloud 微服务
Spring Cloud 是在 Spring Boot 之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成 Spring Boot 应用到 Spring Cloud 升级。 Spring Boot 应用升级为 Spring Cloud…...
el-tree搜索的使用
2023.12.11今天我学习了如何对el-tree进行搜索的功能,效果如下: 代码如下: 重点部分:给el-tree设置ref,通过监听roleName的变化过滤数据。 default-expand-all可以设置默认展开全部子节点。 check可以拿到当前节点的…...
Java使用Microsoft Entra微软 SSO 认证接入
1. Microsoft Entra Microsoft Entra ID 是基于云的标识和访问管理服务,可帮助员工访问外部资源。 示例资源包括 Microsoft 365、Azure 门户以及成千上万的其他 SaaS 应用程序。 Microsoft Entra ID 还可帮助他们访问你的企业 Intranet 上的应用等内部资源&#x…...
“华为杯”研究生数学建模竞赛2016年-【华为杯】A题:无人机在抢险救灾中的优化运用(附获奖论文及MATLAB代码实现)
目录 摘 要: 1. 问题重述 1.1. 问题背景 1.2. 需要解决的问题 1.2.1....
17--异常处理
1、异常概述 1.1 什么是异常 异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致JVM的非正常停止。 异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本运…...
数据结构 | c++编程实现求二叉树的叶节点的个数。(递归非递归)
目录 非递归 递归 非递归 #include<iostream> #include<stack> using namespace std; struct BTNode {int data;BTNode* left, * right;BTNode(int val) :data(val), left(NULL), right(NULL) {}}; //递归的方式求二叉树的叶子结点数 int countnode(BTNode* t) …...
python读取csv文件
在Python中,你可以使用pandas库来读取CSV文件。以下是一个基本的例子: import pandas as pd# 读取CSV文件data pd.read_csv(filename.csv)# 显示前几行数据print(data.head()) 这里,filename.csv应该被替换为你的CSV文件的实际路径和名称。…...
租一台服务器多少钱决定服务器的价格因素有哪些
租一台服务器多少钱决定服务器的价格因素有哪些 大家好我是艾西,服务器这个名词对于不从业网络行业的人们看说肯定还是比较陌生的。在21世纪这个时代发展迅速的年代服务器在现实生活中是不可缺少的一环,平时大家上网浏览自己想要查询的信息等都是需要服…...
深度学习(生成式模型)——ADM:Diffusion Models Beat GANs on Image Synthesis
文章目录 前言基础模型结构UNet结构Timestep Embedding关于为什么需要timestep embedding global attention layer 如何提升diffusion model生成图像的质量Classifier guidance实验结果 前言 在前几篇博文中,我们已经介绍了DDPM、DDIM、Classifier guidance等相关的…...
Ubuntu无法解析域名DNS指向127.0.0.53问题处理
用nslookup 域名.com返回127.0.0.53无法解析错误 error"Could not lookup srv records on xxx.com: lookup xxx.com on 127.0.0.53:53: no such host" #首次尝试编辑/etc/resolved.conf文件DNS为8.8.8.8 或1.1.1.1 发现reboot重启后又恢复到127.0.0.53的内容#再次尝…...
Intewell-Hyper I_V2.0.0_release版本正式发布
新型工业操作系统_Intewell-Hyper I_V2.0.0_release版本正式发布 软件发布版本信息 版本号:V2.0.0 版本发布类型:release正式版本 版本特点 1.建立Intewell-Hyper I基线版本 版本或修改说明 基于Intewell-Lin V2.3.0_release版本: 1.Devel…...
Mysql mybatis 语法示例
service package com.ruoyi.goods.service;import java.util.List; import com.ruoyi.goods.domain.GoodsProducts;/*** 商品Service接口* * author ruoyi* date 2023-08-27*/ public interface IGoodsProductsService {/*** 查询商品* * param ProductID 商品主键* return 商…...
第77讲:二进制方式搭建MySQL数据库5.7版本以及错误日志管理
二进制方式搭建MySQL数据库5.7版本 前面是使用的yum的方式安装的MySQL数据库,在企业生产环境中大多数都用二进制方式安装。 本次使用二进制方式搭建MySQL 5.7.36版本。 1.二进制安装MySQL5.7版本 1.1.下载MySQL5.7版本的二进制文件 [root@mysql ~]# wget https://downloads.…...
R语言,table()函数实现统计每个元素出现的频数+并将最终统计频数结果转换成dataframe数据框形式
在 R中,要统计dataframe数据框中每个元素出现的频数,可以使用table()函数。以下是一个示例: 目录 一、创建数据 二、统计第一列每个元素出现的频数 三、统计第二列每个元素出现的频数 四、将频数结果转换为数据框,并改列名 一…...
微信小程序uniapp记住密码
记住密码功能 在请求登录接口成功后,我们需要判断用户是否勾选记住密码,如果是,则将记住密码状态、账号信息存入本地。 下次登录时,获取本地的记住密码状态,如果为true则获取本地存储的账号信息,将信息回填…...
喜报!Coremail荣获2023信创“大比武”优秀生态融合奖
近期,2023信创“大比武”金融业务创新应用赛道(简称金融赛道)活动正式落下帷幕。经过赛程的层层考核,中泰证券股份有限公司(简称“中泰证券”)与Coremail联合组成的“中泰证券CACTER邮件安全保卫队”最终在…...
知识库SEO:提升网站内容质量与搜索引擎排名的策略
随着搜索引擎算法的不断更新和优化,单纯依靠关键词堆砌和外部链接的时代已经过去。现在的SEO(搜索引擎优化)已经转向了以提供高质量、有价值内容为核心的阶段。知识库SEO便是这个新阶段的重要策略之一。 | 一、知识库SEO的概念与意义 1.定义…...
GPIO复用时5个调试接口引脚要注意
一、JTAG引脚作为GPIO使用要注意 例如PA15引脚,它默认时JTDI引脚,但是可以复用为SPI的NSS片选信号。在初始化时,需要先开启AFIO时钟,再关闭JTAG功能,否则GPIO功能仍然不起作用。初始化代码如下: stm32f10…...
华为云CodeArts Check常见问答汇总
1.【Check】如何查看代码检查的历史记录呢? 答:当前支持查看代码检查日志的历史记录,具体操作步骤: 1、进入代码检查页面,在任务列表中,单击任务名称。 2、进入“代码检查详情”页面,选择“…...
linux 应用开发笔记---【信号:基础】
1.基本概念 信号是发生事件时对进程的通知机制,也可以称为软件中断 信号的目的是用来通信的 1.硬件发生异常,将错误信息通知给内核,然后内核将相关的信号给相关的进程 2.在终端输入特殊字符产生特殊信号 3.进程调用kill()将任意信号发送…...
像素史诗智识终端效果展示:自动提取数据关键指标并生成结论段落
像素史诗智识终端效果展示:自动提取数据关键指标并生成结论段落 1. 产品概览:当科研遇上像素冒险 像素史诗智识终端(Pixel Epic Wisdom Terminal)是一款颠覆传统的研究报告辅助工具。它将枯燥的数据分析过程转化为一场充满像素美学的RPG冒险࿰…...
SAR成像系列:【10】合成孔径雷达(SAR)波数域(omega-K)算法实战:从理论到Matlab实现
1. 波数域算法:为什么它是SAR成像的"瑞士军刀"? 第一次接触omega-K算法时,我被它优雅的数学表达和精确的成像效果震撼到了。这种算法在业内有个更直白的名字——距离徙动算法(Range Migration Algorithm)&am…...
别让大模型只陪你聊天,用 RAG + Structured Extraction 终结合同盲区
音乐圈的版权大战从未停歇,从李荣浩早年关于“版权归属”的公开发声,到近期各路艺人与经纪公司的解约拉锯战,核心往往指向同一张纸——合同。 对于大多数人,无论是艺人、创作者还是创业者,合同是典型的“黑盒”。你签…...
HiveWE:革新性地图编辑引擎助力魔兽争霸III创作者实现效率飞跃
HiveWE:革新性地图编辑引擎助力魔兽争霸III创作者实现效率飞跃 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 在魔兽争霸III地图开发领域,创作者长期面临着传统编辑器性能瓶颈与操作…...
TFT LCD屏幕硬件解析:从XPT2046触摸屏到背光控制的完整指南
TFT LCD屏幕硬件解析:从XPT2046触摸屏到背光控制的完整指南 在工业控制面板和医疗设备显示屏等专业领域,TFT LCD屏幕凭借其高精度显示和可靠触控性能成为首选方案。不同于消费级产品的通用设计,专业场景下的屏幕需要工程师深入理解从触摸采样…...
TPAMI 2026 | 雨雾噪模糊全搞定!CPL 框架让图像复原告别单一任务限制
点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达在日常拍摄中,一张照片可能同时遭遇噪声、雾霾、雨滴等多种退化问题,而传统图像复原方法要么只能处理单一退化类型,要么在多任务场景下…...
不止于搭建:在Kali上配置DVWA靶场后,你的第一个安全测试实战指南
不止于搭建:在Kali上配置DVWA靶场后,你的第一个安全测试实战指南 当你第一次看到DVWA的登录界面时,那种既兴奋又迷茫的感觉我太熟悉了。就像拿到了一套精密的医疗器械,却不知道从哪个部位开始检查。别担心,这篇文章将…...
res-downloader:智能资源捕获工具的技术实现与高效工作流指南
res-downloader:智能资源捕获工具的技术实现与高效工作流指南 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 资源…...
AI图像抠图新体验:cv_unet_image-matting参数调优全解析
AI图像抠图新体验:cv_unet_image-matting参数调优全解析 1. 引言:为什么需要专业抠图工具 在日常工作和生活中,我们经常需要处理图片——制作证件照、设计海报、编辑产品图等等。传统的手动抠图不仅耗时耗力,而且对技术要求高&a…...
5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略
5分钟搞定RetroArch缩略图:从黑屏到完美游戏封面的全攻略 【免费下载链接】RetroArch Cross-platform, sophisticated frontend for the libretro API. Licensed GPLv3. 项目地址: https://gitcode.com/GitHub_Trending/re/RetroArch 还记得打开RetroArch游戏…...
