【问题标题】:Spring Gateway deployment on external tomcat外部tomcat上的Spring Gateway部署
【发布时间】:2021-05-03 18:12:49
【问题描述】:

我正在使用 Spring Boot 开发微服务解决方案。我有 3 个微服务:

  • 身份验证服务(管理用户、角色、权限)
  • 项目服务(用于对项目实体执行 CRUD 操作的服务)
  • 网关(用作解决方案的入口点,也用于验证令牌和路由到服务)

我想将这些部署在 tomcat 服务器上,作为 webapps 中的战争(知道他们有一个嵌入式 tomcat)。 我能够部署身份验证和项目服务,它们可以通过 URI ** localhost:8080/authentication/* ** 和 ** /project/* * 访问,但我无法访问网关** localhost:8080/gateway/ **,它返回一个 404

我确定网关正在运行,因为它在部署后在数据库中创建了表。

**知道在 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

【问题讨论】:

标签: spring tomcat deployment spring-cloud-gateway


【解决方案1】:

Spring Cloud Gateway 本身就是一个 Spring Boot WebFlux 应用程序。它仅支持嵌入式服务器。请查看 spring 文档

https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-traditional-deployment

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 2019-06-23
    • 2016-12-29
    • 2016-12-29
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 2016-02-13
    相关资源
    最近更新 更多