Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Maven搭建SpringCloud项目(eureka、gateway、路由转发)【无敌详细图文】

Maven搭建SpringCloud项目(eureka、gateway、路由转发)【无敌详细图文】

作者头像
Java架构师必看
发布于 2021-05-14 09:40:03
发布于 2021-05-14 09:40:03
2K01
代码可运行
举报
文章被收录于专栏:Java架构师必看Java架构师必看
运行总次数:1
代码可运行

本文将向读者介绍如果使用Maven搭建SpringCloud项目,基于父子模块结构,搭建eureka注册中心模块/业务模块/路由网关gateway模块,图文并茂超级详细,傻瓜式教学。

一 、下载最基本的spring cloud项目

1.1 进入spring官网下载项目:https://start.spring.io/

选择项,如图所示,最后添加一个Eureka Server依赖,最后点击GENERATE按钮,下载到本地并解压

1.2 打开IDEA, 点击open按钮,选择刚才下载的项目,比如我的文件名就叫itcats,打开即可

1.3 打开IDEA后,项目还未初始化完成,点击右下角的import change导入相关依赖,直到项目初始化完成

1.4 先不着急写代码,把项目加入到git管理(可选步骤,需要电脑安装git),点击Terminal按钮,输入命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git init

提交(commit)代码到本地git,如图所示。

具体选项如图所示,最后点击提交。

此时我们的项目就托管给git管理了。

二、创建父子项目模块(Eureka)

2.1 此时我们已经完成了项目的初始化,现在创建父子模块,父模块不涉及业务逻辑,以创建eureka子模块为例。

基于本项目,新建一个Module。

2.2 选择maven项目,下一步。

2.3 输入模块的名称。

2.4 选择finish按钮,并将该模块添加到git管理。

点击Import Changes添加相关依赖。 

2.5 将原来父模块itcats中eureka相关的pom依赖,迁移到eureka子模块中。

父模块中的eureka-server删除,剪切到子模块eureka的pom.xml中,实现功能模块的分离。

2.6 在eureka模块的src/main/java下创建包cn.itcats.eureka,并创建启动类EurekaApplication,并且删除父模块itcats的src文件夹,如图所示,父模块的src文件夹已经不见了删除了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EurekaApplication.java的内容: 
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;

@SpringBootApplication
public class EurekaApplication {

	private static final Logger LOG = LoggerFactory.getLogger(EurekaApplication.class);

	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(EurekaApplication.class);
		Environment env = app.run(args).getEnvironment();
		LOG.info("启动成功!!");
		LOG.info("Eureka地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));
	}
}

2.7 在eureka的resources目录下创建两个文件application.properties和logback.xml

内容如下:

application.properties:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.application.name=eureka
server.port=8761
#自己本身就是注册中心,无需获取注册信息 和 注册到注册中心
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false

logback.xml: 

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 根据自己需求修改一下路径-->
    <property name="PATH" value="/Users/zp/Desktop/personal/log/cn/itcats/eureka"></property>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
<!--            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight(%-5level) %blue(%-50logger{50}:%-4line) %msg%n</Pattern>-->
            <Pattern>%d{ss.SSS} %highlight(%-5level) %blue(%-30logger{30}:%-4line) %msg%n</Pattern>
        </encoder>
    </appender>

    <appender name="TRACE_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/trace.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${PATH}/trace.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern>
        </layout>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${PATH}/error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${PATH}/error.%d{yyyy-MM-dd}.%i.log</FileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>10MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %-50logger{50}:%-4line %green(%-8X{UUID}) %msg%n</pattern>
        </layout>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <root level="ERROR">
        <appender-ref ref="ERROR_FILE" />
    </root>

    <root level="TRACE">
        <appender-ref ref="TRACE_FILE" />
    </root>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

2.8 在EurekaApplication.java中加入注解@EnableEurekaServer,表示启用Eureka注册中心服务

2.9 右键 'Run EurekaApplication.java',看到日志启动成功,打开http://127.0.0.1:8761,显示页面则表示eureka服务启动成功。

2.10 提交修改到git(可选)

三、新建一个子模块用于系统业务

3.1 步骤同2.1到2.4,module名称为system。

3.2 因为system模块需要注册到eureka中,所以它是一个eureka client,而不是一个eureka server,在system模块的pom文件中新增依赖。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

</dependencies>

3.3 与上文的2.7同理,在system的resources目录下创建两个文件application.properties和logback.xml,内容如下。

application.properties:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.application.name=system
server.port=9001
#表示将system模块注册到eureka server 
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
server.servlet.context-path=/system

logback.xml从eureka中拷贝,唯一修改的地方是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<property name="PATH" value="/Users/zp/Desktop/personal/log/cn/itcats/system"></property>

3.4 在system模块中新建包cn.itcats.system,并创建启动类SystemApplication.java,内容从EurekaApplication.java中拷贝。

唯一不同的是注解从@EnableEurekaServer改为了@EnableEurekaClient,具体内容如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@EnableEurekaClient
public class SystemApplication {

	private static final Logger LOG = LoggerFactory.getLogger(SystemApplication.class);

	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(SystemApplication.class);
		Environment env = app.run(args).getEnvironment();
		LOG.info("启动成功!!");
		LOG.info("System地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));
	}
}

右键 'Run SystemApplication',注意EurekaApplication不能停掉哦,不然会报错。

打开http://127.0.0.1:8761/,发现system已经注册到eureka server中了,如图所示。

3.5 在system模块中,创建测试类SuccessController,重启system模块,具体代码如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package cn.itcats.system.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SuccessController {
    @RequestMapping("/success")
    public String success(){
        return "success";
    }
}

打开浏览器输入:http://127.0.0.1:9001/system/success,页面返回success。之所以有/system,是因为我们在system模块的application.properties文件中设置了如下内容,表示该模块已/system开头,便于后面的gateway路由功能。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server.servlet.context-path=/system

3.6 提交代码到git(可选)

四、新建一个子模块用于网关gateway服务

4.1 步骤同2.1到2.4,module名称为gateway。

4.2 在gateway子模块的pom.xml文件中添加依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

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

4.3 与上文的3.3同理,在gateway的resources目录下创建两个文件application.properties和logback.xml,将system中的文件拷贝,内容如下

application.properties

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spring.application.name=gateway
server.port=9000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

logback.xml从system中拷贝,唯一修改的地方是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<property name="PATH" value="/Users/zp/Desktop/personal/log/cn/itcats/gateway"></property>

4.4 在gateway模块中新建包cn.itcats.gateway,并创建启动类GatewayApplication.java,内容从SystemApplication.java中拷贝。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SpringBootApplication
@EnableEurekaClient
public class GatewayApplication {

	private static final Logger LOG = LoggerFactory.getLogger(GatewayApplication.class);

	public static void main(String[] args) {
		SpringApplication app = new SpringApplication(GatewayApplication.class);
		Environment env = app.run(args).getEnvironment();
		LOG.info("启动成功!!");
		LOG.info("Gateway地址: \thttp://127.0.0.1:{}", env.getProperty("server.port"));
	}
}

4.5 启动GatewayApplication.java,打开http://127.0.0.1:8761/,发现GATEWAY已注册。

4.6 提交代码到git(可选)

五、gateway模块设置路由转发

5.1 路由转发,仅需要在gateway的application.properties文件中增加以下内容即可

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#路由转发 如果有多个,则修改数组下标
spring.cloud.gateway.routes[0].id=system
spring.cloud.gateway.routes[0].uri=http://127.0.0.1:9001
spring.cloud.gateway.routes[0].predicates[0].name=Path
spring.cloud.gateway.routes[0].predicates[0].args[0]=/system/**
#spring.cloud.gateway.routes[0].filters[0].name=LoginAdmin
#spring.cloud.gateway.routes[0].filters[0].args[0]=true

5.2 验证路由转发

原来访问SuccessController通过访问:http://127.0.0.1:9001/system/success

如果引入路由转发,则只需要访问:http://127.0.0.1:9000/system/success

目的:将9001地址隐藏(生产环境下可能是公网地址),只暴露9000的gateway地址

至此,Maven搭建SpringCloud项目的所有步骤已经介绍完毕。

本文来源itcats_cn,由javajgs_com转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【愚公系列】2023年11月 Java教学课程 197-SpringCloud(Sleuth+Zipkin 链路追踪基本使用)
链路追踪(tracing)是指跟踪一个分布式系统中特定请求的路径和性能,以便诊断和优化系统中的问题。在链路追踪中,每个服务请求都会被分配一个唯一的标识符(例如 Trace ID),该标识符贯穿整个系统,跨越多个服务,用于标记一个请求的整个生命周期。通过观察每个服务请求中的 Trace ID,可以了解整个请求的流程和性能,并快速定位问题。链路追踪通常与分布式系统中的其他工具(例如日志聚合、实时监控和度量)一起使用,以提供全面的性能分析和故障排除。
愚公搬代码
2025/06/02
1740
【愚公系列】2023年11月 Java教学课程 197-SpringCloud(Sleuth+Zipkin 链路追踪基本使用)
SpringCloud的入门学习之Eureka(高可用注册中心HA)构建Provider服务、Consumer服务
  使用springboot的多环境配置,来搭建Eureka的高可用集群式部署。由于使用的是maven构建的springboot项目,所以首先引入pom.xml配置文件,这里需要注意的是springboot的版本、springcloud的版本对应,不然会出现一个版本不对应错误,稍后可以贴一下错误。我使用的springboot版本是2.2.0的,springcloud版本是Hoxton.RC1。
别先生
2019/11/12
6390
SpringBoot入门建站全系列(七)日志组件的使用
前面六篇已经对SpringBoot的基础用做了介绍,日常项目使用已经足够,本篇介绍下SpringBoot日志使用的注意事项。
品茗IT
2019/08/08
8620
SpringCloud Eureka注册中心使用
一、maven依赖配置,SpringCloud目前有四个版本,经测试Camden,Dalston两个版本构建Eureka正常,其它两版本存在jar依赖问题,所以选取Dalstont版本,目前采用最新和SR5 依赖如下
用户2603479
2018/08/16
3500
SpringCloud Eureka注册中心使用
SpringCloud的入门学习之Netflix-eureka(Eureka的集群版搭建)
1、Eureka单机版的话,可能会出现单点故障,所以要保障Eureka的高可用,那么可以进行搭建Eureka的集群版。
别先生
2019/11/12
8090
SpringCloud-Eureka【server服务高可用搭建】
  在分布式环境中Eureka做为注册中心存在,承担着各个服务的注册与发现,是非常核心的组件,所以如果Eureka环境挂了,那么我们的整个系统也就不稳定了,所以我们要保证我们的Eureka是高可用的,本文来介绍下Eureka的集合搭建。
用户4919348
2019/05/29
7490
分布式--使用Dubbo搭建分布式项目
在分布式架构中,我们会将不同功能模块化,部署到不同的服务器上,这时不同模块之间的通讯就由RPC框架完成,上次介绍了Dubbo的基本使用,知道了它基于Spring容器,因此在SpringBoot项目中可以很方便的使用
aruba
2022/06/19
5590
分布式--使用Dubbo搭建分布式项目
SpringCloud 2.x学习笔记:17、Spring Cloud Gateway之服务注册与发现(Greenwich版本)完整代码
一共三个模块,服务注册模块eureka-server、服务提供模块service-hello和网关模块service-gateway。
程裕强
2019/07/02
4450
SpringCloud 2.x学习笔记:17、Spring Cloud Gateway之服务注册与发现(Greenwich版本)完整代码
Spring Boot开发之流水无情(二)
上篇散仙写了一个很简单的入门级的Spring Boot的例子,没啥技术含量,不过,其实学任何东西只要找到第一个突破口,接下来的事情就好办了,人最怕什么? 我想莫过于干一件事情,没有下手的地方了,而当你一旦找到了这感觉,就可以很喜悦的顺藤摸瓜般的探索你强烈想探索求知的某种事物了,这种冥冥之中玄而又玄的感觉是什么?回想一下: (1) 当你把第一个某种编程语言的Hello World的例子,成功的运行在一个IDE中 (2) 当你第一次从老家出发到达了某个你从未涉足过的地方 (3) 当你成功的完成了第一次
我是攻城师
2018/05/11
1.1K0
sbc(一)SpringBoot+SpringCloud初探
它可以让我们更加快速的开发 Spring应用,甚至做到了开箱即用。 由于在实际开发中我们使用 SpringBoot+ SpringCloud进行了一段时间的持续交付,并在生产环境得到了验证,其中也有不少踩坑的地方,借此机会和大家分享交流一下。
crossoverJie
2022/08/19
2260
sbc(一)SpringBoot+SpringCloud初探
SpringCloud服务发现Eureka的使用教程
PS:eureka在springcloud中充当服务注册功能,相当于dubbo+zk里面得zk,但是比zk要简单得多,zk可以做得东西太多了,包括分布式锁,分布式队列都是基于zk里面得四种节点加watch机制通过长连接来实现得,但是eureka不一样,eureka是基于HTTPrest来实现的,就是把服务的信息放到一个ConcurrentHashMap中,然后服务启动的时候去读取这个map,来把所有服务关联起来,然后服务器之间调用的时候通过信息,进行http调用。eureka包括两部分,一部分就是服务提供者(对于eureka来说就是客户端),一部分是服务端,客户端需要每个读取每个服务的信息,然后注册到服务端,很明显了,这个服务端就是接受客户端提供的自身的一些信息。
IT架构圈
2021/10/21
5430
SpringCloud服务发现Eureka的使用教程
Spring Cloud Zuul实现多级自定义Filter
这篇博客不会去介绍关于zuul的基础知识以及配置详解,我会以代码的形式一步一步带领大家实现,利用多种或一种不同类型的过滤器进行处理相应的业务,以便让大家了解各个过滤器什么时候用,用来干什么,解决大家实际工作中可能碰到的问题。
胖虎
2019/06/26
1K0
Spring Cloud Zuul实现多级自定义Filter
SpringCloud学习5-如何创建一个服务提供者provider
前几篇主要集中在注册中心eureka的使用上,接下来可以创建服务提供者provider来注册到eureka。 demo源码见: https://github.com/Ryan-Miao/spring-cloud-Edgware-demo/tree/master/provider-demo 为了方便版本控制,接下来的项目都是基于https://github.com/Ryan-Miao/spring-cloud-Edgware-demo 这个parent配置的。 创建子moudle provider-demo
Ryan-Miao
2018/07/04
5630
框架 | SpringBoot项目创建和发布部署步骤
如何创建Spring Boot项目? 1 技术选型 JDK1.7、MYSQL57、Spring Boot、Logback、Mybatis 2 开发工具 Myeclipse、Maven、Linux 3 数据库设计 表名:userinfo 结构如下: CREATE TABLE `userinfo` ( `id` int(20) NOT NULL AUTO_INCREMENT, `username` varchar(20) DEFAULT NULL, `password` varchar(20) D
码神联盟
2018/06/04
5.3K2
【Spring Boot 项目创建】003-启动日志优化、开发 Hello World 接口、使用 HTTP Client 测试接口
第三步:访问 http://127.0.0.1:8080/hello 查看效果(省略)
訾博ZiBo
2025/01/06
1040
【Spring Boot 项目创建】003-启动日志优化、开发 Hello World 接口、使用 HTTP Client 测试接口
SpringCloud 分布式日志采集方案
由于微服务架构中每个服务可能分散在不同的服务器上,因此需要一套分布式日志的解决方案。spring-cloud提供了一个用来trace服务的组件sleuth。它可以通过日志获得服务的依赖关系。基于sleuth,可以通过现有的日志工具实现分布式日志的采集。
民工哥
2021/12/06
6260
SpringCloud 分布式日志采集方案
Spring全家桶之SpringCloud——高级阶段(上)
SpringCloud高级阶段上 (当前所在位置) 第一章 负载均衡Ribbon 第二章 声明式调用Feign 第三章 服务容错保护Hystrix
时间静止不是简史
2020/07/27
2.8K0
Spring全家桶之SpringCloud——高级阶段(上)
微服务搭建
官方文档:https://spring.io/projects/spring-cloud
码客说
2022/02/17
1.1K0
微服务搭建
java开发实战(2):springboot工程引入日志配置和swagger3
logback.xml是放到了demo-admin模块中,因为此模块是程序入口,方便日志的统一;
JQ实验室
2022/05/10
4540
极速体验SpringCloud Gateway
Spring Cloud Gateway是Spring Cloud技术栈中的网关服务,本文实战构建一个SpringCloud环境,并开发一个SpringCloud Gateway应用,快速体验网关服务;
程序员欣宸
2019/07/11
8910
极速体验SpringCloud Gateway
推荐阅读
相关推荐
【愚公系列】2023年11月 Java教学课程 197-SpringCloud(Sleuth+Zipkin 链路追踪基本使用)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验