外部tomcat上的spring网关部署

jhiyze9q  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(466)

我正在开发一个带有spring boot的微服务解决方案。我有3个微型服务:
身份验证服务(管理用户、角色、权限)
项目服务(用于对项目实体执行crud操作的服务)
网关(用作解决方案的入口点,还用于验证令牌和到服务的路由)
我想将它们部署在tomcat服务器上,作为webapps中的war(知道它们有一个嵌入式tomcat)。我能够部署身份验证和项目服务,并且可以通过uri访问它们localhost:8080/authentication/*/project/,但我无法连接上的网关localhost:8080/gateway/,返回404
我确信网关正在运行,因为它在部署之后在db中创建了表。

**知道在eclipse中它可以正常工作(因为我在application.yml中指定的端口上运行每个服务),我不明白为什么在tomcat上部署网关时它是不可访问的,并且总是返回404。我可以在部署的tomcat管理器中看到它。

以下是网关的pom.xml:

<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.1</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.myProject</groupId>
    <artifactId>gateway</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>gateway</name>
    <description>Gateway</description>

    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <activatedProperties>dev</activatedProperties>
            </properties>
        </profile>
    </profiles>

    <properties>
        <java.version>11</java.version>
        <springfox-swagger.version>3.0.0</springfox-swagger.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.nimbusds</groupId>
            <artifactId>nimbus-jose-jwt</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>21.1.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
            <version>3.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

这是我的application.yml文件:

spring:
   cloud:
     gateway:
       routes:
       - id: incident
         uri: http://localhost:8080/project
         predicates:
           - Path=/gateway/v1/project/**
         filters:
           - RewritePath=/gateway/(?<RID>.*), /$\{RID}
           - JwtFilter
           - RemoveRequestHeader=Authorization

       - id: authentication
         uri: http://localhost:8080/auth
         predicates:
           - Path=/gateway/auth/**
         filters:
           - RewritePath=/gateway/(?<RID>.*), /$\{RID}

       - id: userManagement
         uri: http://localhost:8080/auth
         predicates:
           - Path=/gateway/v1/user/**,/gateway/v1/permission/**,/gateway/v1/role/**,/gateway/v1/role-permission/**,/gateway/v1/user-role/**
         filters:
           - RewritePath=/gateway/(?<RID>.*), /$\{RID}
           - JwtFilter
           - RemoveRequestHeader=Authorization
   datasource:
       url: jdbc:oracle:thin:@//xxx.xxx.xxx.xxx:1521/ORCLCDB.localdomain
       username: xxx
       password: xxx
   jpa:
       hibernate:
           ddl-auto: update
           id:
              new_generator_mappings=true
       properties:
           hibernate:
               temp:
                   use_jdbc_metadata_defaults: false
               dialect: org.hibernate.dialect.Oracle12cDialect
               physical_naming_strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
       show-sql: true

logging:
   level:
       org.springframework: TRACE
       org.hibernate.type: TRACE
       org.apache.tomcat: INFO
       org.apache.catalina: INFO
   pattern:
       console: "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"
       file: "%d %p %c{1.} [%t] %m%n"
   file: 
       name: ./tomcat-logs/gateway
       path: ./tomcat-logs/gateway
ekqde3dh

ekqde3dh1#

SpringCloudGateway本身就是一个SpringBootWebFlux应用程序。它只支持嵌入式服务器。请查看spring文档
https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-传统部署

相关问题