目录
大家好呀,我是 白墨,一个热爱学习与划水的矛盾体。
快过年了,这段时间工作也不好找。闲着呢也是闲着,提升一下自己,学习一下SpringCloud吧!顺便做个笔记记录一下。
授课老师:尚硅谷-周阳
视频地址:最新版SpringCloud(H版&alibaba)框架开发教程全套完整版从入门到精通(大牛讲授spring cloud)
课程项目源码:周阳老师、我自己的(含sql文件)
技术要求:
微服务(个人理解):将完整的系统中的各个功能模块拆分成一个个独立的服务。
如购物商城项目中包含登录、订单、商品这些模块,就拆分成三个微服务,服务之间相互调用。
优点:
缺点:
分布式微服务架构:服务注册与发现、服务调用、服务熔断、负载均衡、服务降级、服务消息队列、配置中心管理、服务网关、服务监控、全链路追踪、自动化构建部署、服务轻视任务调度操作
大厂案例:
京东
阿里
京东物流
SpringCloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。
SpringCloud官网:https://spring.io/
本门课选择SpringBoot2.X版和SpringCloud H版
详细环境如下:
工具
版本
Cloud
Hoxton.SR1
Boot
2.2.2.RELEASE
CloudAlibaba
2.1.0.RELEASE
Java
Java8
Maven
3.5及以上
Mysql
5.7及以上
SpringBoot 官网:https://spring.io/projects/spring-boot
源码:https://github.com/spring-projects/spring-boot/releases/
GA
:当前最稳定版本
Pre-release
:预发布版本
官网:https://spring.io/projects/spring-cloud
源码:https://github.com/spring-projects/spring-cloud
命名规则:
Boot用字母作为版本号,Cloud用字母 (伦敦地铁站首字母) 作为版本号,并由A-Z的顺序迭代。
当SpringCloud的发布内容积累到临界点或者一个重大BUG被解决后,会发布一个"service releases' 版本,简称SRX版本,比如Greenwich.SR2就是SpringCloud发布的Greenwich版本的第2个SRX版本。
推荐:Cloud官网LEARN选项
中查看版本后的Reference Doc.
或者:overview选项
下翻查看表格选择。如下。
Release Train
Boot Version
2020.0.x aka Ilford
2.4.x
Hoxton
2.2.x, 2.3.x (Starting with SR5)
Greenwich
2.1.x
Finchley
2.0.x
Cloud升级
服务注册中心
服务调用
服务调用2
服务降级
服务网关
服务配置
服务总线
Eureka(停更,要学)
Ribbon(正在使用,但已停更,未来将被LoadBalancer替换)
Feign
Hystrix(停更,国内大规模使用中)
Zuul
Config
Bus
Zookeeper
LoadBalancer(还没成熟)
OpenFeign
resilience4j(国外使用)
? Zuul2
(还没出)
Nacos
Nacos
Consul
-
-
rentienl(阿里的,国内使用)
gateway
-
-
Nacos(阿里的,重点推荐,完美替换Eureka)
-
-
-
-
-
参考资料:
SpringCloud官网文档、SpringCloud中文文档
约定>配置>编码
已经开始到代码部分了,提醒一下,课程项目源码:周阳老师、我自己的(含sql文件)
由于代码太多,所以在笔记里我只做重点知识的记录,毕竟是笔记,还要方便查阅。
New Project
聚合总父工程名字
Maven选版本(不用自带的,选择自己的3.5以上的)
工程名字(项目构建完成后删掉src
文件夹)
符号编码
注解生效激活
java编辑版本选8
File Type过滤(即在idea中隐藏下方的文件格式,个人习惯,可不做)
在pom.xml中添加<packaging>pom</packaging>
标签,表示这个pom是个总的父工程
删掉src文件夹
添加下方总控的jar包版本管理标签
Maven使用dependencyManagement元素来提供了一种管理依赖版本号的方式。
通常会在一个组织或者项目的最顶层的父POM中看到dependencyManagement元素。
使用pom.xml中的dependencyManagement元索能让所有在子项目中引用一个依赖而不用显式的列出版本号。
Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用这个dependencyManagement元素中指定的版本号。
如父类代码里:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
</dependencies>
</dependencyManagement>
然后在子项目里就可以添加mysql-connector时可以不指定版本号 (如果指定了就优先用子项目的版本号),例如:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
这样做的好处就是:如果有多个子项目都引用同一样依赖,则可以避免在每个使用的子项目里都声明一个版本号,这样当想升级或切换到另一个版本时,只需要在顶层父容器里更新,而不需要一个一个子项目的修改;另外如果某个子项目需要另外的一个版本,只需要声明version就可。
父工程创建完成执行mvn:install
将父工程发布到仓库方便子工程继承。
测试一下发布:
然后清除:
建Module
改pom
<artifactId>cloud-provider-payment8001</artifactId>
<dependencies>
<!--spring boot 2.2.2-->
<!--图形化监控展现-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-connector-java-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--jdbc-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
</dependencies>
写yml(代码去我的源码里面copy
)
主启动
业务类
lombok
,要上线的项目还是全部敲出来较好json
形式的封装类@Mapper
注解而不是@Repository
,因为@Repository
插入时可能会有问题resultMap
,可以避免大小写、下划线等错误。(如果开启Mybatis的驼峰匹配,其实也无所谓)server:
port: 8001 #端口号
spring:
application:
name: cloud-payment-service #微服务名称
datasource:
type: com.alibaba.druid.pool.DruidDataSource #当前数据源操作类型
driver-class-name: com.mysql.cj.jdbc.Driver #mysql驱动包(8.0中间多了个cj)
# ? 后面的参数在数据库8.0以后必填
url: jdbc:mysql:///db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
username: root
password: lilang..
mybatis:
mapper-locations: classpath:mapper/*.xml
#mapper的xml中的parameterType属性可以省略路径,只写实体类名称了
type-aliases-package: com.atguigu.springcloud.entities #所有Entity别名类所在包
热部署:开启后,项目在已部署状态下,每次代码改动后无需手动重新部署,可以实时更新。付费插件JRebel
也可实现热部署。
比较耗内存,配置差的电脑就别开了。而且开启后控制台会经常爆红,看着不爽。
开启方法:
添加DevTools到项目中
添加maven插件到父工程的pom.xml
中(如果报错就加上版本号)
开启IDEA的自动编译
开启热注册(Update the value of)
按下快捷键Ctlr+Shift+Alt+/
,选择Registry
勾选下图中的选项
重启IDEA
注:开发阶段可用热部署,生产环境中必须关闭
浏览器默认为80端口,所以客户端使用80端口可以方便用户。
如百度baidu.com:80
,我们直接输入baidu.com
就可以了
RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类,是Spring提供的用于访问Rest服务的客户端模板工具集
使用:(url,requestMap,ResponseBean.class)
这三个参数分别代表REST请求地址
、请求参数
、HTTP响应转换被转换成的对象类型
。
config配置类:RestTemplate的依赖注入配置
@Configuration
public class ApplicationContextConfig {
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
controller调用
@Resource //自动注入
private RestTemplate restTemplate;
@GetMapping("/consumer/payment/create")
public CommonResult<Payment> create(Payment payment) {
return restTemplate.postForObject(PAYMENT_URL + "/payment/create", payment, CommonResult.class);
}
开启@Slf4j
注解后使用log.info();
即可生成日志。
@RequestBody
主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据); GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。查看更多>>
.idea
文件夹,打开workspace.xml
文件在 RunDashboard
下添加以下配置
如图:
重构目的:将重复的代码提取到一个公开公用的工程里面
建 Module
改 Pom
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--工具包,如时间日期格式-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
将原工程中重复的 entities
包拷贝到新建的 cloud-api-commons
工程中
将 cloud-api-commons
工程 maven 打包发布到公用的本地库以供调用。
在右边的 Maven 中刷新,然后双击 clean ,成功以后再双击 install
删除各自原有的 entities 包
在各自的 pom 中添加依赖
上次更新时间:2021.05.12
好啦,本文到此结束!如果对你有帮助,可以给我
点赞+收藏+关注
!你的鼓励是我更新的动力!
手机扫一扫
移动阅读更方便
你可能感兴趣的文章