【问题标题】:Spring Boot Application immediately shuts down after starting in external TOMCATSpring Boot Application 在外部 TOMCAT 中启动后立即关闭
【发布时间】:2018-12-08 11:56:45
【问题描述】:

Spring boot 在外部 TOMCAT 中启动后立即关闭。但在 Eclipse 中,它运行良好,并且 JAR 也可以嵌入。

我使用 Tomcat 7 和 JAVA 8。 我阅读了很多不存在的网站和文档。

我的 Eclipse POM 是:

http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0

<groupId>com.suez.demo</groupId>
<artifactId>Myapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<name>Myappname</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.6.RELEASE</version>
    <relativePath/>
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <start-class>com.suez.demo.SuezApplication</start-class>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>       
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>       
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
    </dependency>       
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web-services</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
      </dependency>
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
         <version>2.3.0</version>
    </dependency>   
    <dependency>
        <groupId>com.notnoop.apns</groupId>
        <artifactId>apns</artifactId>
         <version>1.0.0.Beta6</version>
    </dependency>
 <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
    </dependency>
     <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
         <version>0.7.0</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
             <version>2.0.0.RELEASE</version>
        </plugin>           
          <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.13.3</version>
            <executions>
                <execution>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generatePackage>com.suez.demo.ws</generatePackage>
                <generateDirectory>${project.basedir}/src/main/java</generateDirectory>
                <schemaDirectory>${project.basedir}/src/main/resources</schemaDirectory>
                <schemaIncludes>
                    <include>*.wsdl</include>
                </schemaIncludes>
            </configuration>
        </plugin> 

    </plugins>
</build>

Tomcat 输出日志的最后几行是:

2018-06-29 10:27:37.874  INFO 640 --- [ost-startStop-3] com.suez.demo.SuezApplication            : Started SuezApplication in 29.104 seconds (JVM running for 91.714)
2018-06-29 10:27:37.905  INFO 640 --- [ost-startStop-3] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@75e8c829: startup date [Fri Jun 29 10:27:11 CEST 2018]; root of context hierarchy
2018-06-29 10:27:37.936  INFO 640 --- [ost-startStop-3] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown
2018-06-29 10:27:37.952  INFO 640 --- [ost-startStop-3] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'

有人可以帮帮我吗?

【问题讨论】:

  • 尝试通过命令行运行tomcat,获取日志中未报告的任何错误输出。
  • 如果你想使用外部tomcat运行,你应该删除嵌入式tomcat的依赖并将其从spring boot中排除。

标签: java spring maven spring-boot tomcat


【解决方案1】:

根据您提供的信息很难说,但在我看来可疑的是您使用的是 spring-boot-starter-web ,它反过来会传递 tomcat starter。

我看到这个模块的包装是WAR,所以它打算在外部Web容器中运行,但另一方面,你说它在“JAR with embed too”中运行良好。 所以有点混乱。

我从来没有自己将 Spring Boot 应用程序部署为 WAR 文件,但我相信您可以转到 Start.spring.io 并生成一个将自身打包到 WAR 中的示例应用程序。默认情况下不显示此选项,因此您必须单击“切换到完整版”链接

【讨论】:

  • 嗨@Mark,感谢您的回答。对于部署 JAR,我在 POM 中将 WAR 更改为 JAR,并从 spring-boot-starter-tomcat 中删除“提供”,如 spring boot 部署 WAR 的官方文档中所述。我做了很多尝试都没有成功,包括重做项目和省略 spring-boot-starter-web 依赖。
  • 来自战争的 Tomcat 错误日志:2018 年 6 月 29 日下午 1:14:45 org.apache.catalina.core.StandardContext startInternal 严重:一个或多个侦听器无法启动。完整的详细信息将在相应的容器日志文件中找到 2018 年 6 月 29 日下午 1:14:45 org.apache.catalina.core.StandardContext startInternal SEVERE: Context [/Suez-0.0.1-SNAPSHOT] 由于先前的错误,启动失败.
  • 我认为在战争中你最终会得到与 tomcat 相关的 jars。 (只需打开战争并检查那里的 WEB-INF/lib 中的内容。如果您看到 tomcat 的东西,那就不好了,因为这些类可能会在容器类和您的应用程序类之间发生冲突。我认为当您检查示例应用程序时start.spring.io 你不会在战争中找到任何与tomcat相关的东西
  • 当然要跟踪 jars 你可以使用 mvn dependency:tree 命令,但这是另一回事:)
猜你喜欢
  • 1970-01-01
  • 2017-01-14
  • 2014-08-04
  • 2012-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
相关资源
最近更新 更多