【问题标题】:Spring boot REST application deployed as WAR on tomcat is not working在 tomcat 上部署为 WAR 的 Spring Boot REST 应用程序不起作用
【发布时间】:2020-03-05 17:02:15
【问题描述】:

创建了一个 Spring Boot REST 应用程序。

作为 Spring 启动应用运行
在 Eclipse 中以spring boot application 运行它。效果很好。
REST API 正在使用 URL - http://localhost:8080/schools

在 tomcat 上部署为 WAR

我按照以下步骤操作

  1. 主类扩展SpringServletContainerInitializer
    @SpringBootApplication
    public class RmsBackendApplication extends SpringServletContainerInitializer {

        public static void main(String[] args) {
            SpringApplication.run(RmsBackendApplication.class, args);
        }
    }
  1. pom.xml 中添加了开始类条目
    <properties>
        <java.version>1.8</java.version>
        <start-class>com.codingParkFun.rmsbackend.RmsBackendApplication</start-class>
    </properties>
  1. 添加了启动 tomcat 依赖项
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
  1. 很少有文档说覆盖SpringServletContainerInitializerconfigure 方法。但就我而言,SpringServletContainerInitializer 没有configure 方法。我下载了spring tools 4.0

  2. 使用maven install 生成的包。生成的war包名称为rms-0.0.1-SNAPSHOT.war

  3. 在tomcat上部署war包(版本9.0.27

  4. 访问 REST API URL - http://localhost:8080/rms-0.0.1-SNAPSHOT/schools

输出

  1. Tomcat localhost 日志如下:
09-Nov-2019 11:13:31.013 INFO [main] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath
09-Nov-2019 11:13:32.048 INFO [main] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
09-Nov-2019 11:13:32.048 INFO [main] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
09-Nov-2019 11:13:32.052 INFO [main] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@6231bb88')
09-Nov-2019 11:16:44.566 INFO [Thread-4] org.apache.catalina.core.ApplicationContext.log SessionListener: contextDestroyed()
09-Nov-2019 11:16:44.566 INFO [Thread-4] org.apache.catalina.core.ApplicationContext.log ContextListener: contextDestroyed()
09-Nov-2019 11:19:59.676 INFO [main] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath
09-Nov-2019 11:20:12.722 INFO [main] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
09-Nov-2019 11:20:12.723 INFO [main] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
09-Nov-2019 11:20:12.728 INFO [main] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@2420e962')
09-Nov-2019 11:27:44.515 INFO [main] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath
09-Nov-2019 11:27:45.490 INFO [main] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
09-Nov-2019 11:27:45.490 INFO [main] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
09-Nov-2019 11:27:45.494 INFO [main] org.apache.catalina.core.ApplicationContext.log ContextListener: attributeAdded('StockTicker', 'async.Stockticker@1c7da28')
09-Nov-2019 11:38:48.705 INFO [http-nio-8080-exec-7] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializers detected on classpath

不确定应用程序 REST API 是否工作。请指导。

【问题讨论】:

    标签: java spring maven spring-boot tomcat


    【解决方案1】:

    您需要扩展 SpringBootServletInitializer,而不是 SpringServletContainerInitializer。然后你可以像第 4 步中所说的那样覆盖 configure 方法,如下所示:

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(RmsBackendApplication.class);
    }
    

    希望对你有帮助!

    【讨论】:

    • 非常感谢。我没注意到。
    猜你喜欢
    • 2020-10-23
    • 1970-01-01
    • 2014-10-24
    • 2016-08-11
    • 1970-01-01
    • 2021-01-09
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多