SpringCloud工程部署启动

简介: 本文介绍SpringCloud微服务工程的搭建与部署,涵盖项目创建、模块配置、数据库导入及服务远程调用实现。通过RestTemplate完成服务间HTTP通信,解决跨服务数据获取问题,并引导读者理解微服务拆分与调用关系,为后续深入学习奠定基础。(239字)

1.工程搭建部署

方案一:完整工程导入

cloud.zip(28 KB),如无法运行尝试换未编译版:

cloud-demo.zip(14 KB)
下载解压上述工程,ide工具导入
方案二:从零开始搭建
1.工程与module创建
1.1 父工程创建

NEW PROJECT

CLOUD-DEMO

NAME:

~/DESKTOP/CODE/OTHER/CLOUD

LOCATION:

ARTIFACT COORDINATES

GROUPLD:

CN.ITCAST.DEMO

THE NAME OF THE ARTIFACT GROUP,USUALLY A COMPANY DOMAIN

ARTIFACTLD:

CLOUD-DEMO

THE NAME OF THE ARTIFACT WITHIN THE GROUP,USUALLY A PROJECT NAME

1.0-SNAPSHOT

VERSION:

HELP

PREVIOUS

CANCEL

FINISH


1.2 子module创建
module名称:order-service、user-service
无效文件夹删除,整体结构如图2

CLOUD [CLO

JAVA CLASS

NEW

.IDEA

I

ADD FRAMEWORK SUPPORT...

MODULE...

SONI

KOTLIN CLASS/FILE

L$PR

X CUT

*M

FILE

盾 COPY

LO.GITI

JGC

SCRATCH FILE

介绍N

SRC

COPY PATH/REFERENCE...

DIRECTORY

POM.XR

MGV

PASTE

EXTERNAL L

HTML FILE

ARTHAS COMMAND

SCRATCHES

KOTLIN SCRIPT

FIND USAGES

LF7

KOTLIN WORKSHEET

FIND IN FILES...

公司F

CLOUD [CLOUD-DEMO]~/DESKTOP/CODE/OTHER/CLOUD

.IDEA

ORDER-SERVICE

USERSERVICE

POM.XML

EXTERNAL LIBRARIES

SCRATCHES AND CONSOLES


1.3 父pom资源引入

CLOUD

POM.XML

三三

M POM.XML(CLOUD-DEMO)

PROJECT

PROJECT

~/DESKTOP/CODE/OTHER/CLOUD

CLOUD[CLOUD-DEMO]

<MODULE>USER-SERVICE</MODULE>

12

.IDEA

13

<MODULE>ORDER-SERVICE</MODULE>

ORDER-SERVICE

LCHELPER

</MODULES>

14

SRC

15

TARGET

16

<PARENT>

M POM.XML

17

<GROUPID>ORG.SPRINGFRAMEWORK.BOOT</GROUPID>

USER-SERVICE

<ARTIFACTID>SPRING-BOOT-STARTER-PARENT</ARTIFACTID>

18

M POM.XML

LLLI EXTERNAL LIBRARIES

<VERSION>2.3.9.RELEASE</VERSION>

SCRATCHES AND CONSOLES

<RELATIVEPATH/>

</PARENT>

<PROPERTIES>

<PROJECT.BUILD.SOURCEENCODING>UTF-8</PROJECT.BUILD.SOURCEENCODING>

<PROJECT.REPORTING.OUTPUTENCODING>UTF-8</PROJECT.REPORTING.OUTPUTENCODING>

<JAVA.VERSION>1.8</JAVA.VERSION>

<SPRING-CLOUD.VERSION>HOXTON.SR10</SPRING-CLOUD.VERSION>

<MYSQL.VERSION>5.1.47</MYSQL.VERSION>

<MYBATIS.VERSION>2.1.1</MYBATIS.VERSION>

<LOMBOK.VERSION>1.18.20</LOMBOK.VERSION>

</PROPERTIES>

<DEPENDENCYMANAGEMENT>

<DEPENDENCIES>

<!-SPRINGCLOUD

脂肪观明明4444440008GGBGGGGGAG

<DEPENDENCY>

<GROUPID>ORG.SPRINGFRAMEWORK.CLOUD</GROUPID>

<ARTIFACTID>SPRING-CLOUD-DEPENDENCIES</ARTIFACTID>

<VERSION>${SPRING-CLOUD.VERSION]</VERSION>

<TYPE>POM</TYPE>

<SCOPE>IMPORT</SCOPE>

</DEPENDENCY>

<!--MYSGL驱动-->

<DEPENDENCY>

<GROUPID>MYSQL</GROUPID>

<ARTIFACTID>MYSQL-CONNECTOR-JAVA</ARTIFACTID>

<VERSION>${MYSQL.VERSION}</VERSION>

</DEPENDENCY>

<!-MYBATIS->

<DEPENDENCY>

<GROUPID>ORG.MYBATIS.SPRING.BOOT</GROUPID>

<ARTIFACTID>MYBATIS-SPRING-BOOT-STARTER</ARTIFACTID>

<VERSION>${MYBATIS.VERSION}</VERSION>

中中

</DEPENDENCY>

<DEPENDENCY>

<GROUPID>ORG.PROJECTLOMBOK</GROUPID>

<ARTIFACTID>LOMBOK</ARTIFACTID>

<VERSION>${LOMBOK.VERSION}</VERSION>

</DEPENDENCY>

</DEPENDENCIES>

STRUC

</DEPENDENCYMANAGEMENT>

</PROJECT>

中国


粘贴以下资源依赖,粘贴后maven会自动拉取依赖,如未拉取请手动刷新
1.4 子module资源引入
user-service

CLOUD

USER-SERVICE

POM.XML

三三本

PROJECT

POM.XML(CLOUD-DEMO)

POM.XML(USER-SERVICE)

ENCODING"UTF-8"?>

CLOUD[CLOUD-DEMO]`/DESKTOP/CODE/OTHER/CLOUD

<?XML VERSION

<PROJECT AMLNS:"HTTP://MAVEN.APACHE.ORG/POM/4.0.0"

.IDEA

ORDER-SERVICE

XMLNS:XSI:"HTTP://WWW.W3.ORG/2001/XMLSCHEMA-INSTANCE"

XSI:SCHENALOCATION:"HTTP://MAVEN.APACHE.ORG/PON/A.9 HTTP://AAVEN-APACHE-ORG/XSD/XSD/MAVEN-4.9.XSD"

TARGET

<PARENT>

POM.XML

<ARTIFACTID>CLOUD-DEMO</ARTIFACTID>

USER-SERVICE

<GROUPID>CN.ITCAST.DEMO</GROUPID>

<VERSION>1.0-SNAPSHOT</VERSION>

TARGET

</PARENT>

MPOM.XML

<MODELVERSION>4.0.0</MODELVERSION>

POM.XML

LLLI EXTERNAL LIBRARIES

SCRATCHES AND CONSOLES

12

<ARTIFACTID>USER-SERVICE</ARTIFACTID>

BUTH

<DEPENDENCIES>

<DEPENDENCY>

<GROUPID>ORG.SPRINGFRAMEWORK.BOOT</GROUPID>

<ARTIFACTID>SPRING-BOOT-STARTER-WEB</ARTIFACTID>

中中

</DEPENDENCY>

<DEPENDENCY>

<GROUPID>MYSQL</GROUPID>

<ARTIFACTID>MYSQL-CONNECTOR-JAVA</ARTIFACTID>

</DEPENDENCY>

<!--MYBATIS->

<DEPENDENCY>

<GROUPID>ORG.MYBATIS.SPRING.BOOT</GROUPID>

<ARTIFACTID>MYBATIS-SPRING-BOOT-STARTER</ARTIFACTID>

</DEPENDENCY>

白白

<DEPENDENCY>

<GROUPID>ORG.PROJECTLOMBOK</GROUPID>

<ARTIFACTID>LOMBOK</ARTIFACTID>

中中中

</DEPENDENCY>

</DEPENDENCIES>

<BUILD>

<FINALNAME>APP</FINALNAME>

<PLUGINS>

<PLUGIN>

<GROUPID>ORG.SPRINGFRAMEWORK.BOOT</GROUPID>

<ARTIFACTID>SPRING-BOOT-MAVEN-PLUGIN</ARTIFACTID>

</PLUGIN>

中自由

</PLUGINS>

</BUILD>

/PROJECT>


order-service

CLOUD

ORDER-SERVICE

M POM.XML

中云三

MA

PROJECT

M POM.XML(CLOUD-DEMO)

POM.XML(USER-SERVICE)

POM.XML(ORDER-SERVICE)

CLOUD [CLOUD-DEMO]~/DESKTOP/CODE/OTHER/CLOUD

12

<?XML VERSION-"1.0"ENCODINA "UTF8"?>

.IDEA

<PROJECT XMLNE-"HTTP://MAVEN.APACHE.ORG/POM/4.0.0"

ORDER-SERVICE

XMLNS:XSI-"HTTP://WWW.W3.ORG/2001/XMLSCHEMA-INSTANCE"

SRC

XS1:SCHENALOCATION-"HTTP://MAVEN-APACHE-ORG/PAR/4,8.8.0 HTTP://MAVEN-APACHE.ORG/XSD/MAVEN-4.8.XSC

TARGET

<PARENT>

MPOM.XML

<ARTIFACTID>CLOUD-DEMO</ARTIFACTID>

USER-SERVICE

<GROUPID>CN.ITCAST.DEMO</GROUPID>

8

<VERSION>1.0-SNAPSHOT</VERSION>

TARGET

900

</PARENT>

POM.XML

<MODELVERSION>4.0.0</MODELVERSION>

M POM.XML

LI EXTERNAL LIBRARIES

12

SCRATCHES AND CONSOLES

<ARTIFACTID>ORDER-SERVICE</ARTIFACTID>

13

262

<PROPERTIES>

<MAVEN.COMPILER.SOURCE>8</MAVEN.COMPILER.SOURCE>

16

<MAVEN.COMPILER.TARGET>8</MAVEN.COMPILER.TARGET>

</PROPERTIES>

17

明明幼幼MMWWWWEEEDEERMMMWWWWWWWWWWWWEEEELE

<DEPENDENCIES>

<DEPENDENCY>

<GROUPID>ORG.SPRINGFRAMEWORK.BOOT</GROUPID>

<ARTIFACTID>SPRING-BOOT-STARTER-WEB</ARTIFACTID>

</DEPENDENCY>

<DEPENDENCY>

<GROUPID>MYSQ1</GROUPID>

<ARTIFACTID>MYSQL-CONNECTOR-JAVA</ARTIFACTID>

</DEPENDENCY>

<!-MYBATIS->

<DEPENDENCY>

<GROUPID>ORG.MYBATIS.SPRING.BOOT</GROUPID>

<ARTIFACTID>MYBATIS-SPRING-BOOT-STARTER</ARTIFACTID>

中中

</DEPENDENCY>

<DEPENDENCY>

<GROUPID>ORG.PROJECTLOMBOK</GROUPID>

<ARTIFACTID>LOMBOK</ARTIFACTID>

</DEPENDENCY>

白白白中中中

</DEPENDENCIES>

<BUILD>

PLUGINS>

<PLUGIN>

<GROUPID>ORG.SPRINGFRAMEWORK.BOOT</GROUPID>

<ARTIFACTID>SPRING-BOOT-MAVEN-PLUGIN</ARTIFACTID>

</PLUGIN>

中自由人

</PLUGINS>

</BUILD>

PRO7ECT>


1.5 业务代码编写
1.user-service
application.yml配置文件
|--mapper
|-- UserMapper
|--pojo
|-- User
|--service
|-- UserService
|--web
|-- UserController
|--UserApplication
2.order-service
application.yml配置文件
|--mapper
|-- OrderMapper
|--pojo
|-- Order
|-- User
|--service
|-- OrderService
|--web
|-- OrderController
|--OrderApplication
2.数据库导入

新建模式

PERFORMANCE_SCHEMA

SYS

数据库名:

CLOUD_USER

字符集:

UTF8

排序规则:

UTF8_BIN

取消


需参见上图新建两个数据库,然后导入DDL语句

cloud-order.sql(2 KB)

cloud-user.sql(2 KB)
导完如下

LOCALHOST

CLOUD ORDER

TB_ORDER

视图

FX函数

事件

查询

备份

CLOUD_USER

B USER

用视图

FX函数

事件

查询

备份

INFORMATION_SCHEMA

MYSQL

00

PERFORMANCE_SCHEMA

SYS


3.项目启动
3.1 启动并访问user-service

LOCALHOST:8081/USER/1

{"ID":1,"USERNAME":"柳岩","ADDRESS":"湖南省衡阳市"Y


3.2 启动并访问order-service

LOCALHOST:8080/ORDER/101

{"ID":101,"USERID":1,"NAME":"APPLE 苹果 IP

ENE 12 ","PRICE";69900,"NUM":1,"USER":NULL>

IPHONE


观察发现,虽然order-service服务调用成功,但是里面的user对象却是空的。原因我们应该也可以了解到是因为User对象数据数存储在数据库:tb_user,而此工程连接数据库是:tb_order,查询此数据库时无法获取对应的User数据,怎么获取?获取的具体实现我们将在下一章节进一步铺开。
4.服务远程调用
分析现有链路调用关系可以发现:
http://localhost:8081/user/{id} 可以获取用户信息
http://localhost:8081/order/{orderId} 可以获取订单信息,但是用户信息为空
想要订单信息中返回用户信息,只要在获取订单链路中追加对用户信息的获取、返回值的组装即可,由此引申出微服务之间的远程服务调用,具体调整可见下图。

客户端

USER-SERVICE

ORDER-SERVICE

客户端

ORDER-SERVICE

获取订单信息

获取订单信息

查询订单数据库数据

查询订单数据库数据

微服务查询用户信息

升级

返回用户信息

组装用户信息

返回带用户的订单信息


时序图说明
上述图形为时序图,一般用来描述系统与系统之间的交互流程,主要是交互API、代码顺序、参数一般忽略,时序图不同于业务流程,更关注业务实现过程中系统前后依赖,数据请求与返回,以下为笔者实际工作场景示例:

诊疗中心

护士端

结算中心

药房

住院...

结算中心

诊疗中心

护士端

药房

住院护士

1:获取待转出患者

1.1:获取医嘱执行计划(处置-出入转-出院/转科/转院)

1.2:医嘱执行计划列表

1.3:获取医嘱相关诊疗记录

1.4:患者诊疗记录

1.5:组织患者信息

1.6:待转出患者列表

2:校验指定出院医嘱

2.1:查询医嘱/费用/药房等信息

2.2:医嘱信息

2.3:查询费用信息

2.4:费用信息

2.5:核对结果

3:医嘱审核通过

3.1:二次校验

3.2:更新审核状态

3.2.1:二次校验

3.2.2:清床

3.2.3:停医嘱

3.2.4:退药

3.2.4.1:响应

3.2.4.1.1:作废请领

3.2.4.1.2:审核通过

3.2.4.1.3:审核通过

4:费用审核通过

4.1:二次费用校验

4.2:更新医嘱状态

4.3:状态更新

4.4:操作成功



服务远程调用实现
注入RestTemplate
此处推荐一个小的优雅工具:https://carbon.now.sh/

PACKAGE CN.ITCAST.ORDER;

IMPORT ORG.MYBATIS.SPRING.ANNOTATION.MAPPERSCAN;

IMPORT ORG.SPRINGFRAMEWORK.BOOT.SPRINGAPPLICATION;

IMPORT ORG.SPRINGFRAMEWORK.BOOT.AUTOCONFIGURE.SPRINGBOOTAPPLICATION;

IMPORT ORG.SPRINGFRAMEWORK.CONTEXT.ANNOTATION.BEAN;

IMPORT ORG.SPRINGFRAMEWORK.WEB.CLIENT.RESTTEMPLATE;

**

启动类

@AUTHOR 何波

@DATE 2022-12-22 14:05

@MAPPERSCAN("CN.ITCAST.ORDER.MAPPER")

@SPRINGBOOTAPPLICATION

PUBLIC CLASS ORDERAPPLICATION

PUBLIC STATIC VOID MAIN(STRING[] ARGS) {

SPRINGAPPLICATION.RUN(ORDERAPPLICATION.CLASS, ARGS);

SYSTEM.OUT.PRINTLN("订单工程启动成功");

@BEAN

PUBLIC RESTTEMPLATE GETRESTTEMPLATE() {

RETURN NEW RESTTEMPLATE();


RestTemplate完成远程服务调用
在此笔者除了完成远程服务调用,同时对代码做了结构化、异常校验、函数封装。虽然此处逻辑并不复杂,但是对于主干逻辑简化和代码风格,希望能起到一个引导作用。
重启并访问order-service

C

LOCALHOST:8080/ORDER/101

"USER":{"ID":1,"USERNAME":"柳岩","ADDRESS":"湖南省衡阳市"}

{"ID":101,"USERID":L,"NAME":"APPLE 苹果 IPHONE 12","PRICE":699900,"NUM"


RestTemplate如何实现远程服务调用

RESTTEMPLATE.GETFOROBJECT[URL,USER.CLASS)

用户发起声明式调用

调用自身封装函数

GNULLABLE

其底层本质就是封装

THROWS RESTCLIENTEXCEPTION(

具类,当然此种调用

ASSERT.NOTNULICURL,URI IS REQUIRED";

ASSERT.NOTNULL(METHOD. "HTTPMETHOD IS REQUIRED");

CLIENTHTTPRESPONSE RESPONSE NULL;

OBJECT VART4;

请求封装

对于需要TOKEN校验

CLIENTHTTPREQUEST REQUEST THIS.CREATEREQUESTLURL,METHOD):

的一般会自己封装:

IF(REQUESTCALLBACK IULL)(

CLIENTHTTPREQUESTF

REQUESTCALLBACK.DOWITHREQUEST[REQUEST);

ACTORY.感兴趣的可

发起请求

以进一步搜索.

RESPONSE REQUESTEXECUTE();

THIS.HANDLEFLESPONSE(URTHOD.RESPONSE);

VAR14 - RESPONSEEXTRACTOR LE NULL ? RESPONSEEXTRACTOR.EXTRACTDATAFRESPONSE):NULL;

)CATCH(IOEXCEPTION VAR12)(

STRING RESOURCE URL.TOSTRING();

STRING QUERY URL GETRAWQUERYD;

RESOURCE `QUERY LA NULL ? RESOURCE.SUBSTRING(O,RESOURCE.INDEXOF(63):RESOURCE;

BROW NTY RESOUROURCOOSEXCOPTON'+REGOUROR ON'+ NETNESSAGE+

RETUM VAR14;


5.总结
本节笔者带领大家完成了SpringCloud工程从0->1的搭建,当然你不想搭建也可以直接采用方案一,二者等效,至此读者们完成了一个微服务工程的搭建、部署、访问。同时在本节最后一章,笔者基于RestTemplate发起的http请求实现远程调用,实现当A系统想要获取B系统数据时的跨系统数据交互。然而RESTful API(进一步了解可移步:链接)访问并不是微服务的唯一解决方案,如Dubbo的交互一样可以实现,希望读者们能不限于此。
在本章节,笔者希望大家对于微服务的拆分,服务调用关系有个初步认知,本例中当order-service调用user-service时,前者就充当了服务调用方,后者则是服务提供方,这种调用关系在后续我们将会大量使用。
思考问题
如何实现服务远程调用?
服务远程调用解决了什么问题?
还有哪些技术可以实现远程服务调用?
6.推荐阅读资料
了解时序图绘制:https://www.cnblogs.com/liuyitan/p/16631240.html



相关文章
|
1天前
|
云安全 人工智能 算法
以“AI对抗AI”,阿里云验证码进入2.0时代
三层立体防护,用大模型打赢人机攻防战
1287 1
|
9天前
|
编解码 人工智能 自然语言处理
⚽阿里云百炼通义万相 2.6 视频生成玩法手册
通义万相Wan 2.6是全球首个支持角色扮演的AI视频生成模型,可基于参考视频形象与音色生成多角色合拍、多镜头叙事的15秒长视频,实现声画同步、智能分镜,适用于影视创作、营销展示等场景。
696 4
|
2天前
|
机器学习/深度学习 安全 API
MAI-UI 开源:通用 GUI 智能体基座登顶 SOTA!
MAI-UI是通义实验室推出的全尺寸GUI智能体基座模型,原生集成用户交互、MCP工具调用与端云协同能力。支持跨App操作、模糊语义理解与主动提问澄清,通过大规模在线强化学习实现复杂任务自动化,在出行、办公等高频场景中表现卓越,已登顶ScreenSpot-Pro、MobileWorld等多项SOTA评测。
525 2
|
3天前
|
人工智能 Rust 运维
这个神器让你白嫖ClaudeOpus 4.5,Gemini 3!还能接Claude Code等任意平台
加我进AI讨论学习群,公众号右下角“联系方式”文末有老金的 开源知识库地址·全免费
|
2天前
|
存储 弹性计算 安全
阿里云服务器4核8G收费标准和活动价格参考:u2a实例898.20元起,计算型c9a3459.05元起
现在租用阿里云服务器4核8G价格是多少?具体价格及配置详情如下:云服务器ECS通用算力型u2a实例,配备4核8G配置、1M带宽及40G ESSD云盘(作为系统盘),其活动价格为898.20元/1年起;此外,ECS计算型c9a实例4核8G配置搭配20G ESSD云盘,活动价格为3459.05元/1年起。在阿里云的当前活动中,4核8G云服务器提供了多种实例规格供用户选择,不同实例规格及带宽的组合将带来不同的优惠价格。本文为大家解析阿里云服务器4核8G配置的实例规格收费标准与最新活动价格情况,以供参考。
229 150
|
9天前
|
机器学习/深度学习 人工智能 前端开发
构建AI智能体:七十、小树成林,聚沙成塔:随机森林与大模型的协同进化
随机森林是一种基于决策树的集成学习算法,通过构建多棵决策树并结合它们的预测结果来提高准确性和稳定性。其核心思想包括两个随机性:Bootstrap采样(每棵树使用不同的训练子集)和特征随机选择(每棵树分裂时只考虑部分特征)。这种方法能有效处理大规模高维数据,避免过拟合,并评估特征重要性。随机森林的超参数如树的数量、最大深度等可通过网格搜索优化。该算法兼具强大预测能力和工程化优势,是机器学习中的常用基础模型。
353 164