1. SpringCloud与SpringBoot版本选择
SpringBoot是一种技术,SpringCloud是分布式微服务的一揽子解决方案,有多种技术的落地。
SpringCloud依赖的SpringBoot版本:https://start.spring.io/actuator/info
点击Reference Doc有对应建议的SpringBoot版本
2.Spring Boot版本号命名规则
2.1数字部分
2.1.1 举例:2.3.3.RELEASE
开头2: 表示的主版本号,表示是我们的SpringBoot第二代产品,当功能模块有较大更新或者整体架构发生变化时,主版本号会更新。
中间3: 表示的是次版本号,增加了一些新的功能但是主体的架构是没有变化的,是兼容的,只是局部的一些变动。。
末尾3: 表示的一般是bug的修改或者是小的变动。
RELEASE:此版本号用户标注当前版本的软件处于哪个开发阶段
所以2.3.3.RELEASE合起来就是springboot的第二代版本的第3个小版本的第3次bug修复版本。
SpringBoot版本格式: 主版本号.子版本号.修正版本号。
2.2英文部分:
snapshot: 快照
alpha : 内测
beta : 公测
release : 稳定版本
GA: 最稳定版本
Final : 正式版
Pro(professional) : 专业版
Plus: 加强版
Retail : 零售版
DEMO : 演示版
Build : 内部标号
Delux: 豪华版 (deluxe:豪华的,华丽的)
Corporation或Enterpraise 企业版
M1 M2 M3 : M是milestone的简写 里程碑的意思
RC 版本RC:(Release Candidate),几乎就不会加入新的功能了,而主要着重于除错
SR : 修正版
Trial : 试用版
Shareware : 共享版
Full : 完全版
名词解释:
build-snapshot: 开发版本,也叫快照版本。当前版本处于开发中,开发完成之后,自己进行测试,另外让团队其它人也进行测试使用下;
M1…M2(Milestone): 里程碑版本,在版发布之前 会出几个里程碑的版本。使用snapshot版本开发了一个时间,觉得最近写代码杠杠的,那么就整几个里程碑版本记录下吧,记录我们这个重大的时刻,是你我未来的回忆。
RC1…RC2(Release Candidates): 发布候选。内部开发到一定阶段了,各个模块集成后,经过细心的测试整个开发团队觉得软件已经稳定没有问题了,可以对外发行了。
release: 正式版本。发布候选差不多之后,那么说明整个框架到了一定的阶段了,可投入市场大面积使用了,那么发布出去,让广大用户来吃吃香吧。
SR1…SR2(Service Release): 修正版。这是啥意思呐,这不release版本发布之后,让广大群体使用了嘛,再牛逼的架构师,也无法写出零bug的代码,那么这时候,就优先对于release版本的问题进行修复,这时候每次迭代的版本就是SR1,SR2,SR3。
上述顺序:
snapshot –>M1…MX –> RC1…RCX –> release –> SR1…SRX
对应的文字理解:
开发版本(BS) --(开发到一个小阶段,就要标记下)–> 里程碑版本(MX) --(版本到了一个相对稳定的阶段,可以对外发行了,但是可能还存在修复的问题,此时只做修复,不做新功能的增加)–> 发布候选(RC1) --(BUG修复完成,发布)–>正式版本(release) --(外界反馈存在一些问题,进行内部在修复)–> 修正版本(SRX)
2.3版本选择
CURRENT:当前推荐的版本。
GA:稳定版,可用于生产
PRE :里程碑版/预览版本
SNAPSHOT : 快照
版本号只是一个标识,方便大家在使用时引入版本号即可。为了稳定起见,我们一般选择是RELEASE、CURRENT和GA版本,SNAPSHOT打死不选。
2. 2.4 0-M2 PRE
2.4.0: 第二代Spring Boot的第4个小版本的第0次bug修复;
M2: 这是2.4.0版本的第2次里程碑版本啦;
PRE: 程碑版本/预览版本,告知我们这个是里程碑版本,先偷腥的人可以来;
2.3.3 CURRENT GA
2.3.3 : 第二代Spring Boot的第3个小版本的第3次bug修复;
CURRENT : 这是官网当前推荐的使用版本;
GA: 这是稳定版本,可用于生产环境。
2.3.4 SNAPSHOT
2.3.4: 第二代Spring Boot的第3个小版本的第4次bug修复;
SNAPSHOT: 这是我们内部在开发的一个版本啦,也是对于2.3.4版本的bug迭代版本;
2.2.9 GA
2.2.9: 第一代Spring Boot的第2个小版本的第9次bug修复;
GA: 这是稳定版本,可用于生产;
3.SpringCloud第二季定稿版(截止2020.2.15)
4.关于Cloud各种组件的停更/升级/替换
以前:
2020:
Spring Cloud官方参考文档:
Spring Cloud中文文档:
Spring Boot官方参考文档:
5.IDEA新建project工作空间
5.1.New Project
5.2.聚合总工程名字
5.3.Maven选版本
5.4.工程名字
5.5字符编码
5.6.注解生效激活
5.7.java编译版本选8
5.8.File Type过滤
5.2 父工程POM
<!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud Hoxton.SR1-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.spring.boot.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
5.3Maven中的dependencyManagement和dependencies
5.4maven跳过单元测试
父工程创建完成执行mvn:install将父工程发布到仓库方便子工程继承
6.Rest微服务工程构建
6.1.cloud-provider-payment8001微服务提供者支付Module模块
6.1.1建cloud-provider-payment8001
创建完成后请回到父工程查看pom文件变化,说明cloud-provider-payment8001已经是父工程的一个子模块。
6.1.2改POM文件
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-jdbc -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
在父工程pom使用了dependencyManagement标签后,子模块不需要写groupId和version
6.1.3写YML
新建application.yml文件,图标呈现树叶状则正常。
`
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/db2019?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 123456
mybatis:
mapperLocations: classpath:mapper/*.xml
type-aliases-package: com.atguigu.springcloud.entities
6.1.4主启动
新建启动类,标上@SpringBootApplication注解。
6.1.5业务类
CRUD省略不写。
6.2.热部署Devtools(仅限开发环境,生产环境要关闭)
6.2.1.Adding devtools to your project
添加该依赖到对应的子模块
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
6.2.2.Adding plugin to your pom.xml
下一段配置到父工程当中的pom里
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
6.2.3.Enabling automatic build
6.2.4.Update the value of
6.2.5.重启IDEA
关闭所有服务
6.3.idea开启Run DashBoard
通过修改idea的workpace.xml的方式来快速打开Run DashBoard窗口
找到自己工程所在目录,如:E:\springcloud2020.idea 修改workpace.xml
搜索RunDashboard,添加如下内容
<option name="configurationTypes">
<set>
<option value="SpringBootApplicationConfigurationType" />
</set>
</option>
然后打开idea,即可看到Run Dashboard面板,如果看不到直接重启idea。以后启动服务就会直接进入到Run Dashboard面板,不在进入run面板。
6.4.首说RestTemplate
官网地址:
https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE/javadoc-api/org/springframework/web/client/RestTemplate.html
6.5.工程重构
6.5.1发现问题:系统中有重复部分,重构
6.5.2新建cloud-api-commons工程
6.5.3修改pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud2020</artifactId>
<groupId>com.atguigu.springcloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-api-commons</artifactId>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<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>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
</project>
将Payment实体类和CommonResult通用封装类迁移过来
maven命令clean install
clean后出现success,说明构建成功,然后install发布jar包供其他服务调用
6.5.4改造80和8001工程
修改pom文件,删除原有的Payment实体类和CommonResult通用封装类
<dependency>
<groupId>com.atguigu.springcloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>