Spring Cloud Hoxton 版本微服务项目搭建eureka
前言
距离Spring Boot 2.2.0的发布已经有一个半月左右时间,由于与之匹配的Spring Cloud版本一直没有Release,所以在这期间碰到的问题都是由于Spring Boot和Spring Cloud版本不匹配导致。
很多时候,我们在学习或重建系统的时候都喜欢直接选用最高版本来开发,但是在使用Spring全家桶的时候,这样的选择不一定是最佳选择。主要还是由于Spring全家桶中各项目之间还存在一定的依赖关系。尤其是在大版本迭代期间,是我们尤其要注意的。比如,这次Spring Framework、Spring Boot、Spring Cloud的升级,是一次整体的大版本的升级,涵盖了Spring Framework 5.2、Spring Boot 2.2、Spring Cloud Hoxton`。
由于Spring Boot 2.2基于Spring Framework 5.2构建,而Spring Cloud Hoxton又基于Spring Boot 2.2构建。所以,在Spring Cloud Hoxton发布Release版本之前,出现了很多Spring Boot 2.2搭配Spring Cloud Greenwich版本使用而出现各种莫名问题的情况。
现在Spring Cloud Hoxton的正式发布,也预示着Spring Cloud用户可以正式开始往Spring Boot 2.2.x版本进行逐步升级。
搭建项目
创建父项目
打开idea–> File --> New --> Project --> Maven,按如下图所示操作:
填写项目信息:
填写存储地址:
创建完成后将src删除掉:
修改pom.xml进行全局管理:(请注意 Hoxton.RELEASE
版本的引入方式)
<?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>
<!-- Family 项目 统一 父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.cyj</groupId>
<artifactId>Family</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 全局版本配置 -->
<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>Hoxton.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<!-- 当前依赖需要 IDEA 安装 lombok 插件配合使用 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
<scope>provided</scope>
</dependency>
<!-- 引入单元测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<!-- 子项目 -->
<modules>
<module>eureka-center</module>
<module>gateway-center</module>
<module>admin-center</module>
</modules>
</project>
第二步
完成上面的第一步父项目创建后,创建子项目,右键单击父项目 --> New --> Module,按下图所示操作:
选中Spring In…
填写项目信息:
创建成功 eureka-center
项目
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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cyj</groupId>
<artifactId>Family</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.cyj</groupId>
<artifactId>eureka-center</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-center</name>
<url>https://repo.spring.io/milestone</url>
<description>CYJ:SpringCloud Eureka Master 注册中心</description>
<dependencies>
<!-- SpringCloud Eureka 注册中心依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<!-- SpringCloud Hystrix 微服务容错监控组件:断路器,依赖隔离,服务降级,服务监控 依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<!-- 权限控制依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<!-- SpringCloud 所有子项目 版本集中管理.MS:统一所有SpringCloud依赖项目的版本 依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<!-- SpringBoot 2.2.x 以上版本这样配置 -->
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<!-- SpringBoot 项目打jar包的Maven插件 -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
<!-- SpringBoot项目打包jar名称 -->
<finalName>eureka-center</finalName>
</build>
<!-- SpringCloud 官方远程仓库.MS:部分本地仓库和镜像仓库没有SpringCloud子项目依赖。 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
启动项配置:(包括拦截配置)
package com.cyj.eurekacenter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
/**
* @author ChenYongJia
* @Description: EurekaCenterApplication 服务注册中心配置
* @ClassName: SpringCloudApplication.java
* @Date 2018年12月01日 晚上22:54
* @Email chen87647213@163.com
*/
@Slf4j
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@EnableEurekaServer
public class EurekaCenterApplication {
/**
* 注册中心启动项
* @param args
*/
public static void main(String[] args) {
log.info("=======》启动服务注册中心 eureka-center 服务项目ing......");
SpringApplication.run(EurekaCenterApplication.class, args);
log.info("=======》启动服务注册中心 eureka-center 服务项目成功......");
}
/**
* @author: ChenYongJia
* @Description: WebSecurityConfig 服务注册中心配置拦截
* @Date: 2019-12-28 17:17:49
*/
@EnableWebSecurity
static class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
}
}
}
对配置文件yml的配置:(请自取所需已经很全面了)
server:
#项目端口号
port: 8888
tomcat:
max-connections: 200
max-threads: 300
min-spare-threads: 0
uri-encoding: UTF-8
logging:
pattern:
console: "%d - %msg%n"
#path: D:\Logback-Test\ #日志输出到指定文件夹下默认名为spring.log
file: D:\Logback-Test\wordimg.log #日志输出到指定文件
#level: debug #指定级别
level: #指定输出某个类的日志
com.cnooc.wordimg.LoggerTest2: debug
spring:
application:
name: eureka-server
# 设置查看注册中心的登录用户以及他的角色
security:
user:
name: admin
password: 867647213
roles: ROLEALL
eureka:
#eureka实例定义
instance:
#eureka实例主机名称
hostname: master
#表示eureka client发送心跳给server端的频率。如果在leaseExpirationDurationInSeconds后,server端没有收到client的心跳,
#则将摘除该instance。
#除此之外,如果该instance实现了HealthCheckCallback,并决定让自己unavailable的话,则该instance也不会接收到流量。
lease-renewal-interval-in-seconds: 5
#客户端进行Eureka注册的配置
client:
#关闭eureka的客户端行为:注册服务
registerWithEureka: false
#关闭eureka的客户端行为:订阅服务
fetchRegistry: false
serviceUrl:
#eureka注册中心地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#defaultZone: http://backup:8889/eureka/,http://slave:8890/eureka/
server:
# 关闭自我保护机制,防止失效的服务也被一直访问 (Spring Cloud默认该配置是 true)
enable-self-preservation: false
# 每隔10s扫描服务列表,该配置可以修改检查失效服务的时间,每隔10s检查失效服务,并移除列表 (Spring Cloud默认该配置是 60s)
eviction-interval-timer-in-ms: 5000
下面我们启动 eureka-center
项目:(启动成功…)
访问:http://localhost:8888/ ,可以看到访问成功。
最后
-
更多参考精彩博文请看这里:《陈永佳的博客》
-
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!