0

我是 Spring Boot 的新手,我正在尝试在配置了 servlet 2.5 的项目中使用它。当我使用 Eclipse Maven 插件以“spring-boot:run”为目标运行它时,执行返回以下错误:

`[Tomcat-startStop-1] ERROR o.apache.catalina.core.ContainerBase - A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbeddedContext[]]
at java.util.concurrent.FutureTask.report(FutureTask.java:122) [na:1.8.0_60]
at java.util.concurrent.FutureTask.get(FutureTask.java:192) [na:1.8.0_60]
at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:939) ~[tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:872) [tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419) [tomcat-embed-core-8.5.11.jar:8.5.11]
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409) [tomcat-embed-core-8.5.11.jar:8.5.11]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_60]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_60]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_60]

我的项目有一个父模块和 3 个模块,其中一个子模块是 web 项目。

我的配置如下:

  • 在父 pom 中:

    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> </parent> …… <properties> <springBoot.version>1.5.2.RELEASE</springBoot.version> </properties> _

    </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${springBoot.version}</version> </dependency>
    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId>
    <version>${springBoot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-legacy</artifactId> <version>1.1.0.RELEASE</version> </dependency> </dependencies> </dependencyManagement>

- 在网络子 pom 中:

`   <dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-legacy</artifactId>
    </dependency>
</dependencies>
`
...
`
<plugins>
   <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
   </plugin>
</plugins>
`   
  • 在 web.xml 中: <listener>
    <listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener</listener-class> </listener>
4

1 回答 1

0

spring-boot-legacy, 1.1.0.RELEASE只保证与 Spring Boot, 1.4.2.RELEASE 一起工作。

并非所有在通常的 Spring Boot 中工作的东西都能工作。以编程方式定义的 servlet 过滤器和 servlet(例如使用 FilterRegistrationBean 或 ServletRegistrationBean)将不起作用,我认为这是由于 Servlet 2.5 中的限制。显然 Servlet 3.0 注释也不起作用(例如@WebServlet)

Tomcat 6 支持 Servlet 2.5。因此,Spring Boot 遗留应用程序应该可以使用以下内容正常工作:

mvn tomcat6:运行

<plugin>
  <artifactId>tomcat6-maven-plugin</artifactId>
  <groupId>org.apache.tomcat.maven</groupId>
  <version>2.0</version>
</plugin>

同样重要的是,您要为SpringBootContextLoaderListener提供一些关于在哪里可以找到“ Application ”类(包含@SpringBootApplication的类)的线索,例如:

您的web.xml将包含以下内容:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>demo.Application</param-value>
</context-param>

一旦您了解了这些限制,就会发现真正起作用的东西真是太棒了!

于 2017-09-05T17:09:03.467 回答