前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Maven搭建SpringCloud项目(eureka、gateway、路由转发)【无敌详细图文】

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

作者头像
Java架构师必看
发布2021-05-14 17:40:03
1.5K0
发布2021-05-14 17:40:03
举报
文章被收录于专栏:Java架构师必看Java架构师必看

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

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

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

spring官网下载spring cloud项目
spring官网下载spring cloud项目

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

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

打开刚下载的项目
打开刚下载的项目

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

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

代码语言:javascript
复制
git init

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

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

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

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

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

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

2.2 选择maven项目,下一步。

创建一个子模块eureka
创建一个子模块eureka

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
复制
EurekaApplication.java的内容: 
代码语言:javascript
复制
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
复制
spring.application.name=eureka
server.port=8761
#自己本身就是注册中心,无需获取注册信息 和 注册到注册中心
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false

logback.xml: 

代码语言:javascript
复制
<?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
复制
<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
复制
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
复制
<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
复制
@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
复制
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
复制
server.servlet.context-path=/system

3.6 提交代码到git(可选)

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

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

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

代码语言:javascript
复制
<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
复制
spring.application.name=gateway
server.port=9000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/

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

代码语言:javascript
复制
<property name="PATH" value="/Users/zp/Desktop/personal/log/cn/itcats/gateway"></property>

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

代码语言:javascript
复制
@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
复制
#路由转发 如果有多个,则修改数组下标
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一 、下载最基本的spring cloud项目
  • 二、创建父子项目模块(Eureka)
  • 三、新建一个子模块用于系统业务
  • 四、新建一个子模块用于网关gateway服务
  • 五、gateway模块设置路由转发
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档