文章目录
1、前置
1、前置介绍, 环境, 以及对应的依赖说明 (重点)
2、创建项目 (主要是给基础像我一样薄弱的同学使用)
3、配置对应的pom文件 (重点)
4、以服务发现进行测试
5、个人总结
1、前置介绍, 环境, 以及对应的依赖说明
环境说明:
- JDK:1.8
- maven: 3.6.3(本来我用的是3.3.9, 至于为什么更换了版本, 这个后面会说明, 版本是否更换不影响)
- Spring Boot: 2.2.5.RELEASE
- Spring Cloud: Hoxton.SR3
- Spring Cloud Alibaba: 2.2.1.RELEASE
- 开发工具: IntelliJ IDEA 2020.2 x64
- 系统: Windows 10
搭建项目前, 还是要说一下Spring Boot、 Cloud、Cloud Alibaba三者对应的关系
- Spring Cloud 基于 Spring Boot
- Spring Cloud Alibaba 是 Spring Cloud 的子项目
先把这个顺序理清楚了, 我们在搭建项目的时候, 以及在后面进行功能的开发,以及所碰到的问题, 包的配置方面, 都能够做到思维更清晰
Spring相关版本不清楚的, 可以参考我本专栏的第一篇文章, 有做详细说明
2、创建项目
1. 创建父项目
- 选择maven
- next finish (不做任何勾选)
- 删除src
2. 创建子项目
- new module
- 选择spring initializr, 默认选择, next
- 选择对应的jdk版本, 打包方式
- 图片有做讲解
- next
- 留一个src和pom文件
3、配置pom文件
1.父项目pom.xml
- 这里需要说一下spring对应的三个依赖从哪里获取, 或者说我为什么这么写, 网上搜索出来的往往各种各样的, 自己有时都不知该如何进行选择, 我们需要有一个自己的抉择标准
- 这个项目中的, 父项目的pom.xml的作用主要是用来做版本控制使用, 统一jar包版本
- springCloud: 我是从官方找寻的:https://spring.io/projects/spring-cloud
- springCloudAlibaba: 我是从官方找寻的:https://spring.io/projects/spring-cloud-alibaba
- 基于3、4, 以及上面说有的spring三者的关系,我知道我还缺一个springBoot的
- 最终我是在nacos的GitHub进行确定了以下的用法:https://github.com/alibaba/spring-cloud-alibaba/blob/master/pom.xml. 这个gitHub进入方式: nacos官网-Nacos Spring Cloud 快速开始-划到最下面有一个Spring Cloud Alibaba (这里要重点说明一下, 官方给的GitHub, 我们也要注意是否过时, 版本对否偏低, 比如nacos完整示例代码请参考,就是已经很久没有进行更新过的项目了)
<?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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>untitledTest</artifactId>
<packaging>pom</packaging>
<version>${revision}</version>
<!-- 指定模块, 指定对应的子项目 -->
<modules>
<module>demo</module>
</modules>
<properties>
<!-- 指定项目版本 -->
<revision>1.0-SNAPSHOT</revision>
<!-- 指定SpringBoot版本 -->
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<!-- 指定SpringCloud版本 -->
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
<!-- 指定SpringCloudAlibaba版本 -->
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<!-- 指定JDK版本 -->
<java-jdk.version>1.8</java-jdk.version>
</properties>
<!-- dependencyManagement: 对所依赖jar包进行版本管理的管理器,声明依赖,并不实现引入.
1.不在子项目中声明依赖,是不会从父项目中继承下来的
2.只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项
3.子项目中指定了版本号,那么会使用子项目中指定的jar版本。
主要: 主要管理版本
-->
<dependencyManagement>
<dependencies>
<!-- 声明依赖 springBoot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 声明依赖 springCloud -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- 声明依赖 springCloudAlibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2.子项目pom.xml
-
应用父项目, 由于父项目已经指定了版本, 我们在引用的时候就不需要在对版本进行指定(这里不指定版本, 是指比如:spring-cloud-alibaba-dependencies下面包含的包), 查看方式 ctrl+鼠标左键, 或者通过包的依赖图进行查看
-
引入父项目的版本, 我们写的是${revision}, Windows的可能会报一个红线, 只是IDEA没有识别, 网上有说升级maven到3.5.0以上, 我试了一下没有起到效果, 不知道是不是我的方式不对, 也是我上面环境介绍中maven版本为什么有两个导致的, 解决方法:
<?xml version="1.0" encoding="UTF-8"?>
4.0.0
org.example
untitledTest
${revision}
<groupId>com.example</groupId> <artifactId>demo</artifactId> <version>${revision}</version> <name>demo</name> <description>Demo project for Spring Boot</description> <dependencies> <!-- 父项目中我们已经指定了对应的版本, 这里直接使用就行, 不用在引用版本 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 服务注册与发现 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
4、以服务发现做测试
上面的pom.xml文件中, 我们已经导入了服务发现的包
这里直接运行
application.yml:
server:
# 端口
port: 18082
spring:
application:
name: testName
cloud:
nacos:
discovery:
# 指定nacos server的地址
server-addr: 127.0.0.1:8848
可能会报错如下:
2021-03-13 00:50:53.059 ERROR 17696 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
解决方式:
修改右下角字符集 UTF-8
2021-03-13 00:53:52.714 WARN 17132 --- [ main] c.a.c.n.registry.NacosServiceRegistry : No service to register for nacos client..
解决方式,指定:
spring:
application:
name: testName
启动成功:
5、个人总结
- 其实本篇博客只是简单的介绍,有很多地方都没有写出来, 还需要大家自行在深入研究一下. 比如我们项目的版本我是通过revision进行标记, 是否可以采用revision_test了答案在第二点列举的文档中有说明
- 基于pom文件, 里面有很多节点, 这里也只是列举了部分, 大家可以查阅官方文档: http://maven.apache.org/pom.html#The_Super_POM, 以及父pom.xml还可以扩展很多, 大家可以查阅一下官方GitHub给的案列
- 本篇文章中也是查阅了很多文章, 网上寻找了很多列子, 最后影响自己决定使用哪种方法, 都是通过官方文档或者官方示列
- 父pom.xml文件里面还可以指定dependencies节点, 模块都会使用到的jar, 都可以在父模块进行指定, 子模块进行引入就行
- 个人建议, 既然已经做到微服务了, 对pom文件的结构一定要多了解一点, 深入一点, 对自己会有很大的帮助的
- 以官方文档为树干, 已网上文章为树枝进行扩展