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



相关文章
|
存储 关系型数据库 MySQL
Linux的dev/vda1文件满了导致MySQL无法写入
今天查看两个月前上线的小项目,发现运行非常慢,而且增删改查失效了(吓我一大跳),急急忙忙的就开始了我的线上问题排查之路。/dev/vda1是 Linux 系统中的一个设备文件,它表示第一个虚拟磁盘(vda)的第一个分区(1)。在大多数 Linux 发行版中,这是系统根分区的默认位置。如果您要对/dev/vda1进行操作(例如挂载、格式化、备份等),则需要具有足够的权限。一般来说,只有 root 用户或具有 sudo 权限的用户才能进行这些操作。当Linux的/dev/vda1。
1021 0
|
网络协议 Java Nacos
Nacos—配置管理
Nacos—配置管理
1264 0
|
2月前
|
负载均衡 Java 应用服务中间件
Nacos注册中心
本文介绍了Nacos的安装部署、服务注册与发现、分级模型、负载均衡策略、权重控制、环境隔离及临时/持久化实例等核心功能,涵盖从本地启动到生产级配置的完整实践流程。通过实际操作演示了如何整合Spring Cloud Alibaba实现服务治理,并深入解析其架构设计与应用场景。
 Nacos注册中心
|
2月前
|
存储 缓存 Java
自定义注解
本文介绍Spring中自定义注解的实现,结合AOP与元注解(@Target、@Retention、@Documented)完成日志、权限、登录验证等场景的应用,并通过代码示例展示注解定义、过滤器集成及实际使用流程。
 自定义注解
|
2月前
|
关系型数据库 MySQL Java
SpringCloud工程部署启动
本教程介绍SpringCloud微服务项目搭建与部署,支持完整工程导入或从零构建。涵盖父工程、子模块创建,POM依赖管理,user-service与order-service模块开发,数据库配置及业务代码编写。通过RestTemplate实现服务间远程调用,解决跨服务数据获取问题,帮助理解微服务拆分与通信机制,为后续深入学习打下基础。
|
2月前
|
开发者
业务架构图
业务架构图是将现实业务抽象化表达的工具,通过分层、分模块、分功能梳理业务逻辑,明确各部分职责与关系。它既提升客户对业务的理解,也帮助开发者全局掌握系统结构,是连接业务与技术的重要桥梁,具备清晰边界、功能独立、可迭代优化等特点。
|
2月前
|
uml C语言
系统时序图
时序图(Sequence Diagram)是UML中描述对象间消息传递时间顺序的交互图,横轴为对象,纵轴为时间。它用于展示对象间的动态协作、强调交互时序,并直观表达并发过程。主要元素包括角色、对象、生命线、控制焦点和消息(同步、异步、返回及自关联消息),广泛应用于系统设计与分析。
|
3月前
|
SQL 人工智能 自然语言处理
Navicat AI 助理实战指南:开启智能数据库管理新时代
Navicat集成AI助理,支持自然语言生成SQL、智能优化与错误诊断。通过云端或本地模型(如Ollama)实现高效安全的数据库管理,提升开发效率60%以上,助力开发者迈向智能工作流新时代。
427 0
|
微服务
idea设置Run Dashborad
idea设置Run Dashborad
276 0
|
Java
一文读懂阻塞、非阻塞、同步、异步IO
原文:一文读懂阻塞、非阻塞、同步、异步IO 介绍     在谈及网络IO的时候总避不开阻塞、非阻塞、同步、异步、IO多路复用、select、poll、epoll等这几个词语。在面试的时候也会被经常问到这几个的区别。
6097 156