Spring Cloud框架(原生Hoxton版本与Spring Cloud Alibaba)基础入门篇 ---- 搭建环境
创始人
2024-01-20 16:28:33

springcloud官方文档(Hoxton SR5):https://cloud.spring.io/spring-cloud-static/Hoxton.SR5/reference/htmlsingle/
springcloud中文文档:https://www.springcloud.cc/
springcloud中国社区文档:http://docs.springcloud.cn/
https://www.bookstack.cn/read/spring-cloud-docs/docs-index.md

在这里插入图片描述

目录

  • 一、Spring Cloud简介
    • SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶
    • Spring Cloud 与 Spring Boot版本依赖关系
    • 学习环境版本
    • 关于Cloud各种组件的停更/升级/替换
  • 二、微服务架构编码实现
    • 搭建微服务总体父工程
    • 父工程pom文件
    • Rest微服务工程构建
      • 1.微服务提供者支付module模块cloud-provider-payment8001
        • 创建模块
        • 添加依赖树
        • 编写yml文件
        • 编写主启动类
        • 编写业务类
        • 测试
      • 2.热部署Dev-tools
      • 3.微服务消费者订单module模块cloud-consumer-order80
      • 4.工程重构

一、Spring Cloud简介

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

Spring Cloud专注于为典型的用例和扩展机制提供良好的开箱即用体验,以涵盖其他情况。

  • 分布式/版本化配置
  • 服务注册和发现
  • 路由
  • 服务到服务的呼叫
  • 负载均衡
  • 断路器
  • 分布式消息传递

在这里插入图片描述

SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶

京东内部微服务架构

在这里插入图片描述
在这里插入图片描述

通用微服务技术栈

在这里插入图片描述
在这里插入图片描述

Spring Cloud 与 Spring Boot版本依赖关系

Spring cloud 官网地址:https://spring.io/projects/spring-cloud

在这里插入图片描述

学习环境版本

  • jdk 1.8
  • maven 3,5 以上
  • mysql 5.7 以上
  • Spring Cloud Hoxton.SR1
  • Spring Cloud Alibaba 2.1.0
  • Spring Boot 2.2.2

关于Cloud各种组件的停更/升级/替换

在这里插入图片描述

二、微服务架构编码实现

约定>配置>编码

搭建微服务总体父工程

  1. Create New Project

在这里插入图片描述

  1. 填写工程名

在这里插入图片描述
3. 勾选本地maven

在这里插入图片描述

4.设置项目编码

在这里插入图片描述

5.设置注解激活生效

在这里插入图片描述

6.Java编译版本修改

在这里插入图片描述

父工程pom文件

pom

在这里插入图片描述

项目所需的所有依赖树


4.0.0com.zhao.springcloudcloud20201.0-SNAPSHOTpomUTF-81.81.84.121.18.101.2.178.0.181.1.201.3.2org.springframework.bootspring-boot-dependencies2.2.2.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesHoxton.SR1pomimportcom.alibaba.cloudspring-cloud-alibaba-dependencies2.1.0.RELEASEpomimportmysqlmysql-connector-java${mysql.version}runtimecom.alibabadruid-spring-boot-starter${druid.version}org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis.spring.boot.version}junitjunit${junit.version}log4jlog4j${log4j.version}org.springframework.bootspring-boot-maven-plugintruetrue

Maven中dependencyManagement与dependencies区别

在这里插入图片描述
子项目中,如果不指定,默认和父项目dependencyManagement标签中的版本一致,并且父项目dependencyManagement标签只是规定了版本号,具体引入依赖还是子项目引入。
在这里插入图片描述maven中跳过单元测试:

在这里插入图片描述

Rest微服务工程构建

最简单的支付模块

在这里插入图片描述
构建步骤:

  1. 建module
  2. 改pom
  3. 写yml
  4. 主启动
  5. 业务类
  6. 测试

1.微服务提供者支付module模块cloud-provider-payment8001

创建模块

在这里插入图片描述
在这里插入图片描述
填写模块名

在这里插入图片描述
创建完成

在这里插入图片描述

添加依赖树


cloud2020com.zhao.springcloud1.0-SNAPSHOT4.0.0cloud-provider-payment-8001org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.mybatis.spring.bootmybatis-spring-boot-startercom.alibabadruid-spring-boot-starter1.2.8mysqlmysql-connector-javaorg.springframework.bootspring-boot-starter-jdbcorg.springframework.bootspring-boot-devtoolsruntimetrueorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtest

编写yml文件

server:port: 8001spring:application:name: cloud-payment-service#数据库配置datasource:type: com.alibaba.druid.pool.DruidDataSource#mysql5.x的没有cjdriver-class-name: com.mysql.cj.jdbc.Driver#记得先创建数据库url: jdbc:mysql://localhost:3306/db2020?useUnicode=true&characterEncoding=utf-8&useSSL=falseusername: rootpassword: 123456#mybatis配置
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.zhao.springcloud.entities  #所有Entity别名类所在包

编写主启动类

@SpringBootApplication
public class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class);}
}

编写业务类

1.创建数据库

CREATE TABLE `payment`(`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'ID',`serial` VARCHAR(200) DEFAULT '',PRIMARY KEY(`id`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;INSERT INTO payment(`serial`)VALUES("xxx");

2.创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PayMent implements Serializable {private Long id;private String serial;}

返回前端的json数据对象

@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult {private Integer code;private String message;private T data;public CommonResult(Integer code, String message) {this.code = code;this.message = message;}
}

3.持久化层(dao)
持久化层接口:

@Mapper
public interface PaymentDao {int add(Payment payment);//  加上@Param注解,mapper中就可以采用#{}的方式把@Param注解括号内的参数进行引用Payment getPaymentById(@Param("id") Long id);
}

mapper.xml文件


insert into payment(serial) value (#{serial})

4.服务层(service)
服务层接口

public interface PaymentService {int add(Payment payment);Payment getPaymentById(@Param("id") Long id);}

实现类

@Service
public class PaymentServiceImpl implements PaymentService {@Resourceprivate PaymentDao paymentDao;@Overridepublic int add(Payment payment) {return paymentDao.add(payment);}@Overridepublic Payment getPaymentById(Long id) {return paymentDao.getPaymentById(id);}
}

5.控制器(controller)

@RestController
@Slf4j
public class PaymentController {@Resourceprivate PaymentService paymentService;@PostMapping("/payment/add")public CommonResult add(@RequestBody Payment payment){int result = paymentService.add(payment);log.info("******插入结果:"+result);if (result>0){return new CommonResult(200,"插入数据库成功",result);}else {return new CommonResult(444,"插入数据库失败",null);}}@GetMapping("/payment/get/{id}")public CommonResult getPaymentById(@PathVariable("id") Long id){Payment payment = paymentService.getPaymentById(id);log.info("******插入结果:"+payment);if (payment != null){return new CommonResult(200,"查询成功",payment);}else {return new CommonResult(444,"没有当前查询记录,查询id"+id,null);}}}

测试

启动项目,浏览器输入http://localhost:8001/payment/get/1,查询成功

在这里插入图片描述

因为浏览器一般不支持直接发送post请求,所以,需要使用工具apiPost进行测试
在这里插入图片描述

输入http://localhost:8001/payment/add发送post请求,往数据库中插入一条数据,需要把数据写到body中。

在这里插入图片描述
在这里插入图片描述

2.热部署Dev-tools

子工程添加依赖

        org.springframework.bootspring-boot-devtoolsruntimetrue

父工程添加插件

    org.springframework.bootspring-boot-maven-plugintruetrue

开启自动编译的权限

在这里插入图片描述
热键注册开启

在这里插入图片描述

重启IDEA即可生效!!

3.微服务消费者订单module模块cloud-consumer-order80

新建模块

在这里插入图片描述
添加依赖

  org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.springframework.bootspring-boot-devtoolsruntimetrueorg.projectlomboklomboktrueorg.springframework.bootspring-boot-starter-testtest

新建yml文件

server:port: 80

主启动类

@SpringBootApplication
public class OrderMain80 {public static void main(String[] args) {SpringApplication.run(OrderMain80.class);}
}

业务类
① 复制cloud-provider-payment8001项目里的entities

在这里插入图片描述
② 添加配置类

@Configuration
public class ApplicationContextConfig {@Beanpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}

③ 创建controller

@RestController
@Slf4j
public class OrderController {public static final String PAYMENT_URL = "http://localhost:8001";@Resourceprivate RestTemplate restTemplate;@GetMapping("/consumer/payment/add")public CommonResult add(Payment payment){return restTemplate.postForObject(PAYMENT_URL+"/payment/add",payment,CommonResult.class);}@GetMapping("/consumer/payment/get/{id}")public CommonResult getPayment(@PathVariable("id") Long id){return restTemplate.getForObject(PAYMENT_URL+"/payment/get"+id,CommonResult.class);}
}

测试

启动两个项目进行测试,两个都启动后,右下角会弹出个services提示,点击show。

在这里插入图片描述

用户支付订单,服务与服务之间的调用,输入地址http://localhost/consumer/payment/get/1,查询成功

在这里插入图片描述
添加操作在页面上显示添加成功,查看数据库数据正常

在这里插入图片描述
在这里插入图片描述

4.工程重构

由于目前构建的两个微服务项目有重复的部分,需要将其提取出来,一次打包,到处运行,所以将项目进行重构。

新建模块

在这里插入图片描述

添加依赖

   org.springframework.bootspring-boot-devtoolsruntimetrueorg.projectlomboklomboktruecn.hutoolhutool-all5.8.1

将实体类放入commons模块

在这里插入图片描述

本项目进行打包

在这里插入图片描述

删除 80 和 8001中的实体,引入自定义的依赖

        com.zhao.springcloudcloud-api-commons1.0-SNAPSHOT

在这里插入图片描述

重新启动,并测试

在这里插入图片描述
查询数据成功!

在这里插入图片描述
插入数据成功!

在这里插入图片描述
在这里插入图片描述

至此,Spring Cloud框架(原生Hoxton版本与Spring Cloud Alibaba)基础入门篇 就结束了

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
苁蓉的食用方法 鲜苁蓉的吃法有... 肉苁蓉号称“温而不热,补而不峻,暖而不燥,滑而不泄,故有从容之名。”历来也是传统药食同源的滋补佳品。...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
阳澄湖在哪里哪个省的 阳澄湖是... 点击题目下方苏州生活指南有用 有趣 有态度近期的阳澄湖度很高,3月24日,央视二套《第一时间》直播连...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...