基于Spring Boot2.x 集成 Spring Cloud Gateway

参考

环境

环境 版本 说明
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依赖,本文章使用的多模块开发,网关模块中不引入本依赖会报错
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>

posted @   夏秋初  阅读(266)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2020-12-27 golang实现自己的模块并调用
2020-12-27 golang导入外部包,并解决导入包慢的问题
2020-12-27 golang运行hellowrld
点击右上角即可分享
微信分享提示