Maven搭建SpringCloud项目(eureka、gateway、路由转发)【无敌详细图文】
本文将向读者介绍如果使用Maven搭建SpringCloud项目,基于父子模块结构,搭建eureka注册中心模块/业务模块/路由网关gateway模块,图文并茂超级详细哦,傻瓜式教学,还看不懂劝退!!!一 、下载最基本的spring cloud项目1.1 进入spring官网下载项目:https://start.spring.io/选择项,如图所示,最后添加一个Eureka Server依赖,最后
本文将向读者介绍如果使用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按钮,输入命令:
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文件夹已经不见了删除了。
EurekaApplication.java的内容:
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:
spring.application.name=eureka
server.port=8761
#自己本身就是注册中心,无需获取注册信息 和 注册到注册中心
eureka.client.fetch-registry=false
eureka.client.register-with-eureka=false
logback.xml:
<?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文件中新增依赖。
<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:
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中拷贝,唯一修改的地方是:
<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,具体内容如下。
@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模块,具体代码如下。
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路由功能。
server.servlet.context-path=/system
3.6 提交代码到git(可选)
四、新建一个子模块用于网关gateway服务
4.1 步骤同2.1到2.4,module名称为gateway。
4.2 在gateway子模块的pom.xml文件中添加依赖
<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
spring.application.name=gateway
server.port=9000
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
logback.xml从system中拷贝,唯一修改的地方是:
<property name="PATH" value="/Users/zp/Desktop/personal/log/cn/itcats/gateway"></property>
4.4 在gateway模块中新建包cn.itcats.gateway,并创建启动类GatewayApplication.java,内容从SystemApplication.java中拷贝。
@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文件中增加以下内容即可
#路由转发 如果有多个,则修改数组下标
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项目的所有步骤已经介绍完毕。
更多推荐
所有评论(0)