【问题标题】:Spring boot - Embedded TomcatSpring Boot - 嵌入式 Tomcat
【发布时间】:2016-03-21 11:58:27
【问题描述】:

我有一个 Springboot 应用程序,我想使用嵌入式 tomcat 容器运行它。

我在 Debian 系统上使用它(在我的 Mac 上一切正常)。 我正在使用tomcat 8.0.29。 Tomcat 运行正常。 当我启动我的应用程序时,我得到了这个异常。这不是完整的堆栈跟踪,在这部分之后,它都是关于自动连接所有可能的东西的异常..

2016-03-21 13:42:21.573 INFO  [main]: Starting Servlet Engine: Apache Tomcat/8.0.32
2016-03-21 13:42:24.329 INFO  [localhost-startStop-1]: Initializing Spring embedded WebApplicationContext
2016-03-21 13:42:59.223 ERROR [localhost-startStop-1]: Error starting Tomcat context: org.springframework.beans.factory.BeanCreationException
2016-03-21 13:43:03.472 INFO  [localhost-startStop-1]: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [127] milliseconds.
2016-03-21 13:43:03.593 WARN  [main]: Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
2016-03-21 13:43:03.838 ERROR [main]: Application startup failed
org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:133)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:532)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180)
    at it.besmart.parkserver.StartServer.main(StartServer.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:483)
    at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:54)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.initialize(TomcatEmbeddedServletContainer.java:99)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.<init>(TomcatEmbeddedServletContainer.java:76)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getTomcatEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:457)
    at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:168)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:160)
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
    ... 14 more

完整的 POM.xml

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>it.besmart</groupId>
    <artifactId>eparkserver</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>

    <name>eparkserver</name>
    <description>ePark server</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.3.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <start-class>it.besmart.parkserver.StartServer</start-class>

    </properties>
    <dependencies>
    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>

        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-rest</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
             <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

    <dependency>
            <groupId>com.pi4j</groupId>
            <artifactId>pi4j-core</artifactId>
            <version>1.0</version>
        </dependency>

            <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <executable>true</executable>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>server-copy</id>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <phase>package</phase>
                        <configuration>
                            <target>
                                <echo message="Push to server/home/pi/park/" />
                                <scp trust="yes" todir="pi:sofia2011@192.168.3.67:/home/pi/park/">
                                    <fileset dir="${basedir}/target">
                                    </fileset>
                                </scp>
                            </target>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.ant</groupId>
                        <artifactId>ant-jsch</artifactId>
                        <version>1.8.2</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

这是应用类

@SpringBootApplication
@ComponentScan("it.besmart")
public class StartServer extends SpringBootServletInitializer{


    public static void main(String[] args){


        SpringApplication.run(StartServer.class, args);


    }

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

}

可能是什么问题?

【问题讨论】:

  • I'm using tomcat 8.0.29. Tomcat is running correctly. 是什么意思?除了打算与 Spring Boot 一起使用的嵌入式 Tomcat 之外,您是否还有另一个 Tomcat 正在运行?在这种情况下,您必须通过在运行 spring boot 的命令行中添加系统属性来更改嵌入式 Tomcat HTTP 端口:-Dserver.port=XXX,因为默认端口 (8080) 已被占用。
  • 对不起,我的意思是我的服务器上有 tomcat 8.0.29,但是它关闭了,它没有运行
  • 发布你的应用程序入门类你用@SpringBootApplication注释这个类吗
  • @ComponentScan("it.besmart") 删除这个你为什么用这个
  • @SpringBootApplication 正在扫描你的包和bean

标签: java spring tomcat


【解决方案1】:

将此添加到您的 pom.xml

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

并重构StartServer并删除这个@ComponentScan("it.besmart"),因为@SpringBootApplication还提供了别名来自定义@EnableAutoConfiguration@ComponentScan的属性

【讨论】:

  • 但是如果我排除tomcat插件,那将是容器?此外,排除它会给我 StartServer.class 中缺少 ServletContext 和 ServletExcpetion 的打包错误
  • @besmart 我编辑我的答案添加编辑的依赖项并在之后构建你的项目
  • 非常感谢@kakashi hatake,终于成功了!
  • @besmart 不客气,请确认我的回答
【解决方案2】:

我认为您需要在 pom.xml 中添加 spring-boot-starter-web 依赖项

<dependency> 
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
 </dependency>

【讨论】:

  • 我添加了这个依赖,现在它看起来像 Tomcat 正确启动但不久之后我得到了Application startup failed org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat
猜你喜欢
  • 2018-05-28
  • 2017-03-12
  • 2018-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 2015-03-23
  • 2016-08-19
  • 2016-12-28
相关资源
最近更新 更多