【问题标题】:Gradle Spring Boot project not working in Tomcat as a WARGradle Spring Boot 项目不能在 Tomcat 中作为 WAR 工作
【发布时间】:2014-11-11 02:27:39
【问题描述】:

我有一个使用 Gradle 依赖项在 Spring Boot 中编写的简单示例应用程序。它在调用 localhost:8080/greetings 时显示 helloworld。我将其打包为 WAR,并将其作为 myWebApp.war 部署到 Tomcat。

当我调用 localhost:8080/myWebApp/greetings 时,我得到 404。我应该从下面的 catalina.log 中推断出什么

  Sep 17, 2014 1:43:09 AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.54
Sep 17, 2014 1:43:09 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample.war
Sep 17, 2014 1:43:09 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample\WEB-INF\lib\tomcat-embed-core-7.0.54.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/servlet/Servlet.class
Sep 17, 2014 1:43:09 AM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample\WEB-INF\lib\tomcat-embed-el-7.0.54.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class
Sep 17, 2014 1:43:13 AM org.apache.catalina.util.SessionIdGenerator createSecureRandom
INFO: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [138] milliseconds.
Sep 17, 2014 1:43:13 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive D:\C813507\Tomcat7\apache-tomcat-7.0.54\webapps\cftsample.war has finished in 4,385 ms

【问题讨论】:

    标签: gradle tomcat7 spring-boot embedded-tomcat-7


    【解决方案1】:

    要在独立的 servlet 容器中运行 Spring Boot 应用程序,您需要告诉容器如何启动应用程序。您可以通过扩展SpringBootServletInitializer 并覆盖configure 方法来为您的应用程序提供配置类。这在getting started guide on converting a jar to a war 中有描述。

    你通常会得到这样的类:

    @Configuration
    @EnableAutoConfiguration
    public class Application extends SpringBootServletInitializer {
    
        // Used when launching as an executable jar or war
        public static void main(String[] args) throws Exception {
            SpringApplication.run(Application.class, args);
        }
    
        // Used when deploying to a standalone servlet container
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(Application.class);
        }
    }
    

    【讨论】:

    • 谢谢,比 Spring Boot 自己的文档更清晰简洁!
    • 优秀。我发现很多人在第一次使用 Spring Boot 时遇到了同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 2018-03-24
    • 2016-07-20
    • 2018-01-11
    • 2020-10-23
    • 1970-01-01
    • 2021-07-16
    相关资源
    最近更新 更多