创建父项目
对jar版本进行统一管理
目录结构如下:
在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">
<modelVersion>4.0.0</modelVersion>
<groupId>xb.hou.mscloud</groupId>
<artifactId>mscloud-learn</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>cloud-eureka-server</module>
</modules>
<packaging>pom</packaging>
<!-- 统一的版本号管理 -->
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring.boot.version>2.5.4</spring.boot.version>
<spring.cloud.version>2020.0.3</spring.cloud.version>
<spring.cloud.alibaba.version>2021.1</spring.cloud.alibaba.version>
</properties>
<!-- 统一管理引入包的版本,以及不会引入依赖,相当于先声明,由子项目实现 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<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>
</project>
创建Eureka模块
向Eurake模块中引入依赖
<?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>mscloud-learn</artifactId>
<groupId>xb.hou.mscloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-eureka-server</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<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>
</dependencies>
</project>
修改Eureka的yml文件
server:
port: 7001
eureka:
instance:
hostname: localhost # eureka服务端实例名称
client:
register-with-eureka: false # false表示不让eureka自己注册自己
fetch-registry: false # false表示自己端就是注册中心,职责就是维护服务实例,并不需要检索服务
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 交互地址,查询服务和注册服务都需要这个地址
编写Eureka模块启动类
package xb.hou.mscloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
* @title: EurekaApplication
* @Author xbhou
* @Date: 2021-09-03 23:59
* @Version 1.0
*/
@SpringBootApplication
@EnableEurekaServer // 表示该项目作为eureka的服务端启动
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
最后的目录结构
启动项目
访问http://localhost:7001出现一下画面说明启动成功
遇到的问题
Caused by: java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
- 在TypeNotPresentExceptionProxy类中打断点,盘查问题真正的原因
java.lang.ClassNotFoundException: org.springframework.cloud.context.scope.refresh.RefreshScope
- 按道理说不会说不会出现这个问题,随后我有继续排查pom文件,确认引入包是否正确,发现问题所在:
应引入:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
错误引入:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-eureka-server</artifactId>
</dependency>