首页 > 其他分享 >基于Spring Boot2.x 集成 Spring Cloud Gateway

基于Spring Boot2.x 集成 Spring Cloud Gateway

时间:2023-12-27 19:45:59浏览次数:39  
标签:spring boot Boot2 pom xiaqiuchu Spring org Gateway cloud

参考

环境

环境 版本 说明
windows 10
vs code 1.85.1
Spring Boot Extension Pack v0.2.1 vscode插件
Extension Pack for Java v0.25.15 vscode插件
JDK 11
Springboot 2.3.12.RELEASE
mybatis-spring-boot-starter 2.1.4 mvn依赖
spring-cloud-dependencies Hoxton.SR12 mvn依赖
spring-cloud-starter-gateway 未设置 mvn依赖
spring-cloud-starter-netflix-hystrix 未设置 mvn依赖,本文章使用的多模块开发,网关模块中不引入本依赖会报错
spring-boot-dependencies 2.3.12.RELEASE mvn依赖
Apache Maven 3.8.6

正文

项目为多模块项目,包含子模块:gateway(网关)、common(公共)、api(接口)三个子模块。

步骤

  1. 根目录准备
    1. 在项目根目录的 pom.xml dependencyManagement/dependencies 中指定 Spring Boot、Spring Cloud 与三个子模块的版本号。
    2. 在项目根目录的 pom.xml packaging 设置为 pom(没有这个节点就添加上)。
    3. 在项目根目录的 pom.xml 添加 modules , 并将三个子模块引入(没有这个节点就添加上)。
  2. gateway 子模块
    1. pom.xml 引入 spring-cloud-starter-gatewayspring-cloud-starter-netflix-hystrix 依赖。
    2. pom.xml 一定要删除 spring-boot-starter-web 依赖,不然会导致启动失败。(gateway导入了webflux包,会有冲突)
    3. pom.xml 指定 parent。
    4. application.properties 文件设置对应配置转发规则:
      server.port=8080
      #
      spring.cloud.gateway.routes[0].id=student
      # 要转发到哪里
      spring.cloud.gateway.routes[0].uri=http://127.0.0.1:8081
      # 转发的规则,有很多种,这里是转发 /student/ 下所有请求
      spring.cloud.gateway.routes[0].predicates[0]=Path=/student/**
      
    5. 入口文件注解 @SpringBootApplication 修改为 @SpringCloudApplication
  3. api 子模块,本模块就是一个正常的 web 项目。
    1. pom.xml 指定 parent。
    2. 暴露接口 /student/findById,接收一个 id 参数,返回 Student 对象。
      
      @RestController
      @RequestMapping("/student")
      public class StudentController {
      
      	@Resource
      	StudentService studentService;
      
      	@GetMapping("findById")
      	public Student findById(@RequestParam(name = "id") Long id) {
      		return studentService.findById(id);
      	}
      
      
      }
      
      
  4. common 子模块,本模块是公共模块,本项目示例中存放数据库实体。
    1. pom.xml 指定 parent。

POM 代码

完整代码在文章顶部

  1. 根目录 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>
    <groupId>com.xiaqiuchu</groupId>
    <artifactId>demo</artifactId>
    <version>${xiaqiuchu.demo.version}</version>
    <name>demo</name>
    <description>网关项目测试</description>
    <packaging>pom</packaging>
	<modules>
        <module>gateway</module>
        <module>api</module>
        <module>common</module>
    </modules>
    <properties>
        <xiaqiuchu.demo.version>0.0.1</xiaqiuchu.demo.version>
        <!-- https://blog.csdn.net/DCTANT/article/details/108125229 springboot与cloud版本关系 -->
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
    </properties>
     <repositories>
		<repository>
			<id>public</id>
			<name>aliyun nexus</name>
			<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
		</repository>
	</repositories>
    <pluginRepositories>
		<pluginRepository>
			<id>public</id>
			<name>aliyun nexus</name>
			<url>https://maven.aliyun.com/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
    <dependencies>
        
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
             <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>com.xiaqiuchu</groupId>
                <artifactId>api</artifactId>
                <version>${xiaqiuchu.demo.version}</version>
            </dependency>
            <dependency>
                <groupId>com.xiaqiuchu</groupId>
                <artifactId>gateway</artifactId>
                <version>${xiaqiuchu.demo.version}</version>
            </dependency>
            <dependency>
                <groupId>com.xiaqiuchu</groupId>
                <artifactId>common</artifactId>
                <version>${xiaqiuchu.demo.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

  1. gateway 子模块 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>
    <groupId>com.xiaqiuchu</groupId>
    <name>gateway</name>
    <description>网关</description>
    <artifactId>gateway</artifactId>
    <parent>
        <groupId>com.xiaqiuchu</groupId>
        <artifactId>demo</artifactId>
        <version>${xiaqiuchu.demo.version}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <dependencies>
    <!-- 网关与 web 互斥-->
        <dependency> 
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency> -->
        <!-- <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency> -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration> 
                    <mainClass>com.xiaqiuchu.gateway.DemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

  1. api 子模块 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>
    <groupId>com.xiaqiuchu</groupId>
    <name>api</name>
    <description>接口</description>
    <artifactId>api</artifactId>
    <parent>
        <groupId>com.xiaqiuchu</groupId>
        <artifactId>demo</artifactId>
        <version>${xiaqiuchu.demo.version}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <dependencies>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
         <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.xiaqiuchu</groupId>
            <artifactId>common</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.xiaqiuchu.api.DemoApplication</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

  1. common 子模块 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>
    <groupId>com.xiaqiuchu</groupId>
    <name>common</name>
    <description>公共模块</description>
    <artifactId>common</artifactId>
    <parent>
        <groupId>com.xiaqiuchu</groupId>
        <artifactId>demo</artifactId>
        <version>${xiaqiuchu.demo.version}</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

标签:spring,boot,Boot2,pom,xiaqiuchu,Spring,org,Gateway,cloud
From: https://www.cnblogs.com/xiaqiuchu/p/17931230.html

相关文章

  • Spring Boot学习随笔- 后端实现全局异常处理(HandlerExceptionResolver),前后端解决跨域
    学习视频:【编程不良人】2021年SpringBoot最新最全教程第十七章、异常处理异常处理作用:用来解决整合系统中任意一个控制器抛出异常时的统一处理入口传统方式传统单体架构下的处理方式配置全局异常处理类@ComponentpublicclassGlobalExceptionResolverimplementsHand......
  • Spring/SpringBoot 参数校验
    目录基础设施搭建1.相关依赖2.实体类案例校验参数注解JSR提供的校验注解:HibernateValidator提供的校验注解:实践案例......
  • springboot 中,ApplicationRunner、InitializingBean、@PostConstruct 执行顺序
    划水。。。ApplicationRunner、InitializingBean、@PostConstruct执行顺序InitializingBean是Spring提供的一个接口,它只有一个方法afterPropertiesSet(),该方法会在容器初始化完成后被调用。ApplicationRunner是SpringBoot提供的一个接口,它有一个方法run(),该方法会在......
  • springboot注解表达式
    ("execution(*com.aop..*.*(..))")1、execution():表达式主体2、第一个*号:表示返回类型,*号表示所有的类型3、.包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包4、第二个*号:表示类名,号表示所有的类5、.*(..):最后这个星号表示方法名,号表示所有的方法,后......
  • SpringBoot内置Tomcat启动原理
    SpringBoot内置Tomcat启动原理当依赖Spring-boot-starter-web依赖时会在SpringBoot中添加:ServletWebServerFactoryAutoConfigurationservlet容器自动配置类该自动配置类通过@Import导入了可用(通过@ConditionalOnClass判断决定使用哪一个)的一个Web容器工厂在内嵌Tomc......
  • SpringBoot入门实战:SpringBoot服务层设计
    1.背景介绍SpringBoot是一个用于构建Spring应用程序的优秀框架。它的目标是简化Spring应用程序的开发,使其易于部署和扩展。SpringBoot提供了许多有用的工具,可以帮助开发人员更快地构建和部署应用程序。在本文中,我们将讨论SpringBoot服务层设计的核心概念、算法原理、具......
  • springboot项目Mapper注入失败:@org.springframework.beans.factory.annotation.Autowi
    同事发给我一个项目,说启动时,报mapper无法注入,让我帮忙排查一下问题记录一下我自己遇到这个问题的排查顺序首先先排除以下问题:1.mapper类是否加入到ioc容器中(有没有使用@Mapper标签),如果报错是service层,那就看看是不是没有添加server标签2.检查项目是否扫描mapper类所在......
  • Spring-Session实现session共享原理及解析
     Session简介是什么?Session在网络中表示“会话控制”,用于存储特定用户所需的属性和其他的配置信息;Session表示一个特定的时间间隔,可以指用户从登陆系统到注销退出系统之家的时间。为什么出现?因为http是一种无状态协议,如果没有Session的话,服务器无法识别请求是否来自同一......
  • Spring Security区分session失效与踢出登录策略
     两种场景简单说明session失效:正常session过期,需要提示用户登录过期等提示,跳回登录页,让用户重新登录。踢出登录:系统只允许设备单一登录,一旦账号在另一个设备如浏览器登录了,则前一个登录账号会被踢出,同时给用户一个账号在另一个地方登录,防止密码泄漏等友好提示。session失效策......
  • SpringBoot自动配置原理
    通过@SpringBootConfiguration引入了@EnableAutoConfiguration(负责启动自动配置功能)@EnableAutoConfiguration引入了@Import注解Spring容器启动时:加载Ioc容器时会解析@Import注解@Import导入了一个deferredImportSelector,会使SpringBoot的自动配置类的顺序再最后,这样方便......