SpingBoot整合SpringCloud实现注册运行坑点整理

大家好,今天给大家总结一下我在使用SpringBoot整合SpringCloud时候遇见的一些问题,以及一些注意事项,其中很多事我亲测网上博文无效之后自己的解决方法,希望给遇到这个问题各位一个借鉴。

废话就不多说了,什么介绍什么是springcloud,什么是springboot的这里就先不谈,至于怎么创建springcloud项目我也不想多说,直接百度,第一个博客里面说的很清楚,我这篇主要是以那篇博客为基础,介绍一些那篇博客里没有讲到或者是比较重要的点以及坑。

今天花了一天来爬坑,就是因为中央仓库没办法下博客上教程里面的那个版本的springcloud...导致出现奇奇怪怪的问题,比如无法创建某个bean,报空指针异常什么的,其实你打开自己的maven依赖管理,会发现很多依赖没有下载下来,或者后面的版本是unknown,如下图所示

刚开始我以为是教程的问题,然后就各种换教程,之后百度错误,百度上面包括谷歌上面各种奇怪的答案,包括说是因为父pom没有版本统一导致子pom没办法识别版本,或者是说删除一下maven仓库,重新下载就好了
于是我就各种删maven,重新下载,来来回回折腾了很多次,发现还是不行。。。
万般无奈之下,死马当做活马医,按照某个教程的版本号改了版本。。。就好了。。。
所以这次直接上新版本的代码 ,顺带总结一波实现注册和运行的流程。
1.首先是注册中心,这个注册中心是所有服务类共用的,首先是Pom.xml
<?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>top.wangqichao</groupId>
	<artifactId>eurekaserver</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eurekaserver</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</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>Dalston.SR5</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

这里按照其他教程的方法创建就会给你的pom.xml,只需要注意一点

主要就是版本的问题,springcloud的版本是以大写字母开头的代表大版本,然后后面的SRn代表小版本,一般springboot是1.5.x都是用的D开头的,到后面1.5.1x就是用的E开头的版本,具体用什么没有仔细研究过,因为后面来说版本之间差距不大,排错的时候注意一下就可以了。
所以我这里springboot使用的是1.5.9,而springcloud选择的D.SR5版本
然后还有一个小知识点就是如果你的pom里面project标签有报错,说阿里云中央仓库找不到的话,需要在下面添加这段代码,这是去其他仓库里面找,如果上面的就可以下载依赖,就不需要添加此段代码
<!--如果提示中央仓库无法找到,需要添加此段代码-->
	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>

2.然后是aplication.properties文件,之前教程都是用的yml格式,所以我找了半天才确定这个defaultZone到底应该怎么写
#eueka 主机名
eureka.instance.hostname=localhost
#不注册自己
eureka.client.register-with-eureka=false
#获取服务
eureka.client.fetch-registry=false
#提供者和消费者的注册地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

server.port=8761

这里的8761就是注册中心的端口,而后面每个客户端都要使用不同的端口。
注意里面的几个设置选项。

3.然后就是启动类,默认创建的是不带注解的,然后我昨天使用的时候必须打三个注解才能运行,但是今天只需要两个注解就可以了,不得不说很神奇,注意需要先将其加到spring的默认配置文件中,也就是在启动类的类名上点一下会出来一个黄色灯泡,按照提示操作就可以。下面的启动类同理。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

//作为注册中心必带注解,否则启动无法看到注册中心
@EnableEurekaServer
@SpringBootApplication
public class EurekaserverApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaserverApplication.class, args);
	}
}
4.启动,其运行和昨天一样,可以看到此时还没有实例被注册

5.然后是客户端,也可以叫做服务端,因为他们都是 要在注册中心来注册的,可以提供服务,也可以调用别的服务

按照上面的步骤创建,但是和上面略有不同就是创建时候要选择eureka discover而不是eureka server,创建的时候注意springboot版本不要选择2.0.x,直接选1.5.x,否则依赖会有问题,直接改版本号会出错
创建之后,修改pom.xml的版本
<?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>top.wangqichao</groupId>
	<artifactId>eurekaclient</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>eurekaclient</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</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>Dalston.SR5</spring-cloud.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>
注意只需要修改两个版本的地方,其他地方不需要修改,也不需要像其他博客说的在父类pom中添加继承依赖版本号。
6.在其自带的配置文件中添加相关信息
#此客户端的端口号,要与注册中心的不同
server.port=8762
#服务名,在注册中心可以看到
spring.application.name=client-a
#要和注册中心的一样才行
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

7.修改启动类文件,也是注解问题,然后编写一个简单的方法

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@EnableEurekaClient
@SpringBootApplication
@RestController
public class EurekaclientApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaclientApplication.class, args);
	}

	@Value("${server.port}")
	String port;
	@RequestMapping("/hi")
	public String home(@RequestParam String name) {
		return "hi "+name+",i am from port:" +port;
	}

}
注意和服务类一样,需要添加注解@EnableEurekaClient来标记这是一个客户端。
启动之后,可以看到注册成功

然后进入8762端口,输入相关参数,可以看到成功了

至此,一个简单的注册和运行就完成了。
8.总结一下:
第一个就是版本问题一定要注意,如果遇到依赖包无法下载,或者下载之后版本显示unknown的,删除一次maven仓库不奏效就赶紧换版本,不要在一棵树上吊死。
第二个就是如果pom里面project标签无法在中央仓库找到这个依赖的话,需要在下面添加其他仓库的镜像地址
第三个就是配置文件的写法,特别是defaultZone的写法,以及要理解几个配置的含义
第四个就是需要将启动类加入到sping的配置文件路径里面去,否则启动会报错
第五个就是启动类里面的注解不要忘记,也不要将注册中心和客户端的注解弄混。

9.最后,附带上参考的那篇热门博客的传送门

https://blog.csdn.net/forezp/article/details/69696915

以及本次demo的github地址

https://github.com/superkingdan/springclouddemo

希望大家能一次成功,今天的分享就到这里了


没有更多推荐了,返回首页