SpringCloud入门教程全集

动漫头像时间:2024-04-29 18:49:03点击:9

一、介绍

1.概念是一系列框架的有序集合。它利用boot的开辟便利性巧妙地简化了分布式系统基础设施的开辟,如服务发现注册、配置中心、消息总线、负载平衡、断路器、数据监控等,都可以用boot的开辟风格做到一键启动和部署。
2.优缺点(次要针对微服务)
(1)优点
①每个服务足够内聚,足够小,代码容易理解、开辟效率提高;
②服务之间可以独立部署,微服务架构让持续部署成为能够;
③精细度业务节制,每个服务可以各自进行负载平衡扩展和数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
④容易扩展开辟团队,可以针对每个服务组件开辟团队;
⑤提高容错性,一个服务的内存泄露并不会让整个系统瘫痪;
⑥每个服务可以用不同的技术开辟,系统不会被长期限制在某个技术栈上。
(2)缺点
①开辟人员要处理分布式系统的复杂性:
设计服务之间的通信机制,需要考虑分布式事务等问题;
涉及多个服务直接的自动化测试;
服务管理的复杂性(PS:现在的出现适合解决这个问题);
②对于业务数据和处理能力不是很明确的创业公司,不适合微服务架构模式,这时候最重要的是快速开辟、快速部署、快速试错。
3.应用场景
适合业务复杂度较大、并发量较高的场景
4.与对比
(1)架构完整度上,只有服务注册/服务治理()两个模块,已经有二十多个模块,而且还在增加;
(2)的社区活跃度高;但有高质量的中文文档
(3)服务间的通讯采用的RPC,则是Http的Rset,RPC对业务接口有强依赖性,需要通讯双方有一样的接口,REST更为轻量化,只通过一个约定进行规范,不存在代码间的耦合。

二、子项目

的子项目一直在持续更新,这里我把中文网首页的直接放上来了。
详情参照:
1.()
配置管理工具包,让你可以把配置放到远程服务器,集中化管理集群配置,目前支持本地存储、Git以及。
2.Bus()
事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化,可与结合实现热部署。
3.()
云端服务发现,一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。
4.()
熔断器,容错管理工具,旨在通过熔断机制节制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。
5.Zuul()
Zuul是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul相当于是设备和流应用的Web网站后端所有请求的前门。
6.()
配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。
7.()
封装了操作,是一个服务发现与配置工具,与容器可以无缝集成。
8.for()
通过协议绑定服务到,是推出的开源PaaS云平台。
9.()
日志收集工具包,封装了和log-追踪以及和操作,为应用实现了一种分布式追踪解决方案。
10.DataFlow()
大数据操作工具,作为XD的替代产品,它是一个混合计算模型,结合了流数据与批量数据的处理方式。
11.()
基于的安全工具包,为你的应用程序添加安全节制。
12.()
操作的工具包,用于使用方式的服务发现和配置管理。
13.()
数据流操作开辟包,封装了与,等发送接收消息。
14.CLI()
基于BootCLI,可以让你以命令行方式快速建立云组件。
15.()
提供云端负载平衡,有多种负载平衡策略可供选择,可配合服务发现和断路器使用。
16.()
是聚合服务器发送事件流数据的一个工具,用来监控集群下的情况。
17.()
是一种声明式、模板化的HTTP客户端。
18.Task()
提供云端计划任务管理、任务调度。
19.()
便于云端应用程序在各种PaaS平台连接到后端,如:数据库和消息代理服务。
20.()
提供选举,如,,,等常见状态模式的抽象和实现。
21.()
Boot式的启动项目,为提供开箱即用的依赖管理。

三、实战教程

这里我把部分代码传到上了:
或者直接从CSDN下载:

1.搭建父子项目

(1)首先创建一个File-New-选择,JDK你们可以选择1.8的

(2)修改项目名称,我这里叫

(3)选择一下基础依赖,这里选择web-web,右上角可以修改版本。

(4)然后一个基础的父项目就创建成功了

(5)右击项目,New-,同样选择,项目名称为user,跟刚刚不同的是,我们这里不选择web了,可以直接从父项目获得web的依赖

(6)修改父项目的pom文件,添加的方式和

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/org..boot/-boot--/2.6.3///com.//0.0.1-/name/nameDemoforBoot/pom/user//java.11/java./org..boot/-boot--web//org..boot/-boot--test/test///org..boot/-boot--/////
com.//0.0.1-/

最后子项目的pom.xml如下:

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/com.//0.0.1-//com./user/0.0.1-/nameuser/nameDemoforBoot/java.11/java./org..boot/-boot--/////

(8)添加文件,将文件替换成yml文件,项目布局如下:

(9).java和.yml代码如下:
.java

com..user.;org.....;org...;org..web.bind..;org..web.bind..;org..web.bind..;org..web.bind..;java.time.;java.util.List;@{@(="/test")@test(){"";}}

算法:实现接口(方法),自带七种算法。
(1):轮询;(默认)
(2):随机;
(3):会先过滤掉由于多次访问故障而处于断路器状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问;
(4):根据平均响应时间计算所有服务的权重,响应时间越快的服务权重越大被选中的概率越大。刚启动时如果统计信息不足,则使用(轮询)策略,等统计信息足够,会切换到;
(5):先按照(轮询)策略获取服务,如果获取服务失败则在指定时间内进行重试,获取可用的服务;
(6):会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务;
(7):复合判断所在区域的性能和的可用性选择服务器。

③的强化版,内置了,简化了和的使用。

(2)的基本使用方法

后面的使用中会整合+,有完整的代码实例,这里就只做介绍不贴代码
①首先,在pom.xml中引入和的依赖
②在注册中心端提供一个可以调用的接口,并在中添加注释@
③在客户端入口建立一个接口,@括号里填写的是注册中心的-name(.yml中配置的),然后在中调用这个客户端。中添加注解@和@

3.(1)服务雪崩解决方案

介绍前,我们先相识一下它产生的背景–服务雪崩。
服务雪崩:一个服务失败(调用时间过长或失败),导致整条链路的服务都失败的情形,我们称之为服务雪崩。
解决服务雪崩的方式有下面几种:
1)应用扩容:加机器、升级硬件
2)流量节制:限流(超出限定流量,返回让用户稍后再试)
3)缓存:将用户访问量大的数据放入缓存中,减少数据库访问。
4)服务降级:
①超时:当下游的服务响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度
②程序运行异常:当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户
5)服务熔断:不调用该失败的服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用

(2)使用方法

有两种方式实现,一个是通过内置的实现:
1、导入依赖---
2、启动类开启支持@
3、配置yml文件..=true
4、实现接口或接口
另一种是通过注解@完成,属于方法级别的降级,后面的使用有代码实例:
1、导入依赖---
2、启动类开启支持@
3、在方法上添加注解@并配置降级后的方法

4./(1)常用的几种注册中心的区别Ⅰ.与

①常用于项目,常用于
②保证的是CP(一致、分区容错但不保证可用),保证的是AP(可用、分区容错但不保证一致)
在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的
各个节点是平等关联,只要有一台就可以保证服务可用,而查询到的数据并不是最新的
③有和角色,各个节点平等
④采用过半数存活原则,采用自我保护机制解决分区问题
自我保护机制:通过在配置如下参数,可启动保护机制。

..-self-=true
(2)搭建使用

Ⅰ.新建子模块,这里新建的是注册中心,后面还需要个客户端去调用,建立方法在上面介绍过了
Ⅱ.在父项目的pom文件添加相关依赖,次要是的依赖和的依赖等,注意版本。修改后文件如下

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/org..boot/-boot--/2.6.3///com.//0.0.1-/name/nameDemoforBoot/pom/user///java.11/java.-.2021.0.1/-./org..boot/-boot--web//org..boot/-boot--test/test//org../-----/2.2.6.//org..boot/-boot--///org../--/${-.}/typepom/type////org..boot/-boot--/////
?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/com.//0.0.1-//com.//0.0.1-/name/nameDemoforBoot/java.11/java.//org..boot/-boot--/////

.yml:

:port:8899::-url::http://${..user.name}:${..user.}@${..}:${.port}/-with-:-:::::user:name::

:添加@注释,并重新配置

com..;org..boot.;org..boot..;org......;org.....web..;org.....web..;org.....web..;@@{voidmain([]args){.run(.,args);}@{@void(http){http.csrf().("//**");.(http);}}}

Ⅳ.访问注册中心:http://:8899/,输入/,可以看到下面的界面则搭建成功了,为空代表还没有应用注册了这个服务

Ⅴ.搭建客户端,新建同上,新增.java和.yml、pom.xml

pom.xml:

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/com.//0.0.1-//com.//0.0.1-/name/nameDemoforBoot/java.11/java.//org..boot/-boot--/////

.yml:

:port:8900::-url::http://${..user.name}:${..user.}@:8899/::::name:--8900:user:name::::-:10

.java

com..;org..boot.;org..boot..;org......;org.....web..;@@@{voidmain([]args){.run(.,args);}}

Ⅵ.启动,http://:8900/,登录/,发现服务注册成功了,如果有报错,查看后面的报错解决模块。

(3)搭建使用a.单机++

Ⅰ.下载源码压缩包,--XXX.zip或者--XXX.tar.gz,我这里是版本,下了个--1.4.3.zip。
下载地址:
Ⅱ.启动,解压后找到.cmd。修改.cmd(由于我们没配置集群,需要修改为单机启动),将setMODE=""替换为

remsetMODE=""setMODE=""

启动成功后访问:http://:8848/,用户名密码/Ⅲ.同样的我们也需要创建的注册中心和客户端。我这里直接在刚刚创建好的父子项目中添加模块作为注册中心,项目布局如下

Ⅳ.相关文件代码如下,注意要把之前的依赖都注释掉,会和的依赖有冲突
注册中心的pom.xml:引入父模块

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/com.//0.0.1-//com.//0.0.1-/name/nameDemoforBoot/java.11/java.//org..boot/-boot--/////

父项目的pom.xml:添加的依赖,同时注释掉依赖,服务发现时两者jar包会冲突;同时添加依赖及配套的,同时内置了负载平衡的,所以还需要把中的注释掉;添加依赖

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/org..boot/-boot--/2.6.3///com.//0.0.1-/name/nameDemoforBoot/pom/user////java.11/java.-.2021.0.1/-./org..boot/-boot--web//org..boot/-boot--test/test//com../-----/2.2.6./org../----////com../-----/2.2.6.//org../---//org../--//org../----/2.2.6.///org../--/${-.}/typepom/type////org..boot/-boot--/////

.yml

:port:8070::name:-::-addr:127.0.0.1:8848

.java::次要是添加@@注释

com..;org..boot.;org..boot..;org.....;org.....;@@@{voidmain([]args){.run(.,args);}}

.java

com...;com......;com......;org..web.bind..;org..web.bind..;java.time.;@{@("")@(="",={@(name="...",="")})(){.now()+"";}(){"系统繁忙,请稍后再试";}}

Ⅴ.启动后,再去网址http://:8848/上查看服务管理-服务列表模块,发现注册中心成功了

Ⅵ.同样我们需要一个客户端去调用,新建一个模块,项目布局如下:

Ⅶ.相关文件代码
pom.xml:引入父模块依赖

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/com.//0.0.1-//com.//0.0.1-/name/nameDemoforBoot/java.11/java.//org..boot/-boot--/////

.yml

:port:8071::name:-::-addr:127.0.0.1:8848

.java:次要是添加@@注释

com..;org..boot.;org..boot..;org.....;org....;@@@{voidmain([]args){.run(.,args);}}

.java:添加了(后面会介绍这个组件),提供程序入口

com...;org.....;org....;org..web.bind..;org..web.bind..;java.time.;@{@;@("/test")test(){.();}}@("-"){@("")();}

Ⅷ.启动后再次查看,服务创建成功了,进入http://:8071/test,发现有输出,则调用成功


Ⅸ.修改,将".();"的注释放开

com...;com......;com......;org..web.bind..;org..web.bind..;java.time.;@{@("")@(="",={@(name="...",="")})(){.();.now()+"";}(){"系统繁忙,请稍后再试";}}

重启和,再次访问,发现服务降级生效了

b.集群+负载平衡

①集群数据库配置(用于数据持久化)–目前版本的依赖
1)为保证数据一致性,集群需使用公共数据库来保存服务管理中的数据,目前支持数据库。
搭建可以参考这篇文章:
2)在解压后的文件的\\conf\目录下找到数据库建表文件-.sql,在中执行以创建一系列配置表。进入后选择数据库后执行/root//-.sql

可以看到这些表创建成功了

3)在\\conf目录下的.文件最下方添加数据库连接配置,注意更改ip密码啥的

..=.num=1db.url.0=jdbc:://192.168.124.128:3306/?=utf-8==truedb.user=.=!

②集群节点配置
1)将\\conf\目录下的.conf.文件拷贝一份,重命名为.conf,打开添加如下配置,注意!这里一定要写真实的IP(cmd查看),不能写,127.0.0.1,不然集群启动会找不到别的实例,导致无法选举出

192.168.124.1:8841192.168.124.1:8842192.168.124.1:8843

2)修改启动文件.cmd,还记得我们之前修改成了单机么,改回来即可,rem是注释的意思。将setMODE=""注释掉,并把setMODE=""的注释取消。

setMODE=""remsetMODE=""

3)将调整后的文件拷贝三份
将拷贝后的文件分别命名为

4)分别在\\conf目录下的.文件中修改对应的端标语.port=8848为:8841、8842、8843(的.端口改为8841,以次类推)

③配置
1)下载:,选择版本

2)解压后修改\-1.20.2\conf目录的.conf文件。
找到和模块,在前添加,修改,添加下面的代码:

{127.0.0.1:8841=2;127.0.0.1:8842=2;127.0.0.1:8843=2;}/{http:///;}

添加后效果如图:

④启动测试
分别启动下的.cmd文件,并启动.exe。
登录中配置的路径:http:///,/,登录成功。

刷新后,端口变成了8842,说明利用已经实现了负载平衡

c.配置中心使用

Ⅰ.首先相识配置文件读取顺序:
1..yml(用来程序引导时执行,应用于更加早期配置信息读取)
2./.(项目根目录中目录下)
3./.yml
4..(项目根目录下)
5..yml
6.//.(项目目录中目录下)
7.//.yml
8./.(项目的目录下)
9./.yml
当配置信息冲突时,先读取到的优先级高,也就是

Ⅱ.使用示例

使用配置中心须知:注意版本、版本和版本的对应,否则配置不生效。比如用的2.1版本,可以用2.2.8.,可以用2.3.12.

(1)在中增加一个新的命名空间,然后记录其命名空间的id

(2)将之前的/yml从项目中删除,添加.yml,配置对应环境的命名空间

::name:my-:::::file-::/::dev---::dev::-addr:开辟环境的ip:8848::-7527-452b-ae6d----::test::-addr:测试环境的ip:8848::-1468-424c-adf4-

(3)将原来的/yml文件放到配置中心,注意命名要跟的name一致,我这里叫my-.yml

5.Zuul(1)Zuul概念介绍

①概念功能:Zuul是开源的一个API服务器,本质上是一个web应用。Zuul在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。
②实现:Zuul的核心是一系列的,使用Zuul后,在集群中将一对多的关联转变成了一对一的关联。
③优点:可以在网关层进行数据合法校验、权限认证、负载平衡等统一处理;客户端只须跟网关交互,减少了客户端与各个微服务之间的交互次数

(2)使用教程

1.Zuul是开源的微服务网关,它可以和等组件配合使用。
使用步骤如下:
①添加依赖
②启动类添加注释@
③配置.yml路由分发
2.Zuul+
代码实例
(1)在父项目的pom.xml引入如下依赖

org../----zuul/2.2.6.//org../----/2.2.6.//com../-----/2.2.6./org../----////com../-----/2.2.6.//

(2)naco子项目代码,我之前做过,直接复用之前的代码。注意下的name-后面zuul配置要用到

然后我这边在中加了个方法以供测试

@("/")@(){"test";}

(3)创建网关模块,布局如下:

pom文件就引用父模块的依赖就行
.java这个配置用来解决版本冲突问题

com...;java.lang..;java.lang..;org...;org.....;org.....;org..boot.web...;org....;org....;org....;org....;org....;org....NoOp;org....zuul..;org....zuul.web.;org....zuul.web.;org....Bean;org....;@{="/";="";@Bean(@,@,@(=)){new(,,);}enum{;@int(){if(.(.())){0;}1;}}enum{;@(,,[]args,){if(.(args[0])){;}.(,args);}}{;;;(,,){this.=;this.=;this.=(!=);}@(bean,){if((bean)){=new();.(.);.(.);.(new[]{.,NoOp.});?ctor=..()[0];.(ctor.(),new[]{,});}bean;}}}

过滤器用来统一处理逻辑

com...;com..zuul.;com..zuul..;com..zuul..;org....zuul...;..http.;{@(){.;}@int(){.-1;}@(){true;}@run(){ctx=.();=ctx.();.out.("test");;}}

.yml配置端口等,注意这里的是刚刚的-

:port:8008::name::::-addr:127.0.0.1:8848zuul::auth:path:/auth/**:-

添加,并增加注释

com..;com....;org..boot.;org..boot..;org....zuul.;org....Bean;@@{@Bean(){new();}voidmain([]args){.run(.,args);}}

3.测试,可以看到下面两个网址效果一致,并且生效了
http://:8070/
http://:8008/auth/

6./(1)概念介绍

1)
是基于框架,提供了一套Web应用安全性的完整解决方案。核心功能次要包括:认证、授权、攻击防护等。其核心就是一组过滤器链。

2)
是基于的安全工具包,在分布式项目中为你的应用程序添加安全节制。
次要功能包括单点登录,令牌中继和令牌交换等。

我这里次要介绍的的使用,的用法基本一致

(2)使用教程1)

1.去官网查看文档,相识下你所使用的版本特性。网址:,从-Viewall点进去,找到,然后查看相关文档。

2.实战
(1)简单实现用户认证功能
①首先创建一个的web项目,并引入的依赖
pom.xml如下:

?xml="1.0"="UTF-8"?="":xsi=""xsi:=""4.0.0/org..boot/-boot--/2.2.6.///com.//0.0.1-/name/nameDemoforBoot/java.11/java./org..boot/-boot--web//org..boot/-boot--//org..boot/-boot--//org..boot/-boot--test/test///org..boot/-boot--/////

②创建和等类,提供入口,中配置用户名和密码

:

com...;org...;org..web.bind..;org..web.bind..;@{@(="/")@(){"";}}

.java:

com...;org....;org.......;org.....web..;org.....web..;org.....web..;org.....;@@{@void(auth){auth.().(new()).("").(new().("")).("");}}

③验证:进入http://:8080/,会弹出登录页面,输入我们设置的用户名及密码即可

最终成果如下:

(2)在此基础上,通过角色来节制用户权限。这里使用了自定义的登陆页面,并将用户名密码的配置通过实现。
代码如下:

①java类
.java:

com...;org.....;org....;org.......;org.....web..;org.....web..;org.....web..;org...core.;org...core..;org...core..;org.....;java.util.List;@{@;@void(auth){auth.().(new());}@void(http){http.().("/.html").("/").("").("").("/").();http.csrf().();http.().("/","/").().("//2").("").("//1").(",");}}

.java

com...;org...;org..web.bind..;org..web.bind..;@{@(="/")@(){"";}@("/1")(){"/1";}@("/2")(){"/2";}@(="/")(){"";}@("")(){"";}@("")(){.out.("...");"";}}

.java

com...;org...core.;org...core..;org...core..User;org...core..;org...core..;org...core..;org.....;org...;java.util.List;@(""){@(s){List=.("");newUser("",new().("123"),);}}

②html类
.html

!htmlhtmllang="en"headmeta="UTF-8"//headbody登录成功!br/ahref="//1"/abr/ahref="//2"/a/body/html

.thml

!htmlhtml="":th="":sec=""head//headbodydivth:if="${.}"用户名或密码不正确。/divformth:="@{/}"="post"div用户名:type="text"name=""///divdiv密码::type=""name=""///divdivtype=""="提交"//div/form/body/html

1.html

!htmlhtml="":th="":sec=""head//headbodyPage/body/html

2.html

!htmlhtml="":th="":sec=""head//headbodyPage/body/html

2.+实践
(1)不使用的用法
pom.xml:

org..boot/-boot--web//org..boot/-boot--//org..boot/-boot--//org..boot/-boot--test/test//org..boot/-boot--//org.../--/2.3.3.//.xml.bind/jaxb-api/2.3.0//com.sun.xml.bind/jaxb-impl/2.3.0//com.sun.xml.bind/jaxb-core/2.3.0//.//1.1.1//org..boot/-boot--data-/io./-core////.///

授权服务器:

com...;org.....;org....Bean;org....;org..data...;org....;org...core.;org...core.;org...core..;org.....;org.....;org.......;org......web..;org......web..;org......web..;org......web..;org......;org........;@@{@;@(=);@;@Bean(){new();}@;@void(){.().("").("","","").(1800).("").("all").(().("123"));}@void(){.().().();}@void(){.();}}

资源服务器:

com...;org....;org.....web..;org......web..;org......web..;org......web..;@@{@void(){.("").(true);}@void(http){http.().("//**").("").("//**").("").().();}}

配置:

com...;org....Bean;org....;org....;org.......;org.....web..;org.....web..;org...core..;org.....;@{@Bean@(){.();}@Bean@(){.();}@void(auth){auth.().("").(new().("123")).("").and().("").(new().("123")).("");}@void(http){http.("//**").().("//**").().and().csrf().();}}

测试入口:

com...;org..web.bind..;org..web.bind..;@{@("//")(){"";}@("//")user(){"";}@("/")(){"";}}

测试:注意这里必须用,首先要获取

然后通过可以访问对应的资源,其中除的资源外其他资源均可访问
http://:8080/?=-9822-4adb-8dc7-
http://:8080//?=-9822-4adb-8dc7-
http://:8080//?=-9822-4adb-8dc7-

(2)使用:
1.首先我们相识下使用储存的好处:
具有时效性,有过期功能处理有优势;
可以在多个服务之间实现令牌共享

安装使用参考:

2.使用代码
.yml:

::::0host:192.168.124.128port:6379:pool:max-:1000max-idle:10min-idle:3max-wait:-1:123

在中将令牌放到中:

重新进行的请求,可以看到已经存在中了

7.

参考我最近写的这一篇使用教程

8.

参考我最近写的这一篇使用教程

四、常见报错解决1.和版本对应错误

(1)to[org.....
解决方式:查看官网地址
把拿到的字符串去

可以看到我用的.6.3版本对应的版本为2021.0.1

2.常见报错解决

(1)withcode403;onif
onany
报错原因会自动配置CSRF防御机制,认为post,putandhttp都是有风险的,
如果这些发送过程中没有带上CSRF,会被直接拦截并返回403
解决:见,继承放行相关csrf请求

3.常见报错解决(版)

(1)启动服务时报错:java.lang.:db.numis
报错原因:默认集群启动,而集群没有配置
解决:修改为单机启动。修改.cmd,将setMODE=""替换为

remsetMODE=""setMODE=""
4.常见报错解决

(1).]beitdoesnot
报错原因:依赖有问题
解决---已经被废弃了,现在应该使用----。
如何解决近似问题呢我这里给个基本步骤
①进入网址:,搜索框输入。可以看到有两个依赖。

②点进第二个,可以看到标识,代表已经废弃了,现在使用----

(2)注入接口时提示not.ismorethanoneof‘’type

错误原因:这是IDEA工具中插件的问题
解决方法----Core-Code-forBean右侧修改成保存即可。

5.报错解决

(1)isnofortheid“”
原因.0开始改变了默认的密码格式,需要要将前端传过来的密码进行某种方式加密,官方推荐的是使用加密方式
如:

auth.().("").("").("")
改为
auth.().(new()).("").(new().("")).("");
6.Zuul报错解决
推荐内容