Spring-boot: проблема с развертыванием WAR-файла в Tomcat 7 - PullRequest
0 голосов
/ 16 октября 2019

Все,

Я создал пример приложения, используя spring-boot, maven, и он отлично работал в моей IDE, используя mvn spring-boot: run. Но когда я пытаюсь развернуть приложение как WAR (чистая установка mvn) в Tomcat 7, я получаю следующую ошибку. Пожалуйста, помогите мне найти причину проблемы.

**INFO: validateJarFile(C:\_tools\apache-tomcat-7.0.96\webapps\spring-server-2.1.8.RELEASE\WEB-INF\lib\tomcat-embed-el-9.0.24.jar) - jar not loaded. See Servlet Spec 3.0, section 10.7.2. Offending class: javax/el/Expression.class Oct 16, 2019 2:31:57 PM org.apache.catalina.core.ContainerBase addChildInternal
SEVERE: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/spring-server-2.1.8.RELEASE]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1018)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:994)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:662)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1127)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:2020)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)**

Вот мой файл POM.

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.service.data</groupId>
    <artifactId>spring-server</artifactId>
    <packaging>war</packaging>
    <name>dev-tools-server</name>
    <description>Spring Backend to access Tandem SQL/MX</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>       
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

А это мой файл класса

@SpringBootApplication
public class SpringServerApplication extends SpringBootServletInitializer {

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

    public static void main(String[] args) {
        SpringApplication.run(SpringServerApplication.class, args);
    }
}

Ответы [ 2 ]

0 голосов
/ 17 октября 2019

Вы не можете запустить приложение Spring Boot 2.x на Tomcat 7. Из-за простого факта, что Spring Boot 2.x зависит от Spring Framework 5.x, который имеет минимальные требования API сервлета для версии 3.1 (см. Что нового в весне 5 ).

Вам нужно по крайней мере Tomact 8.5 , чтобы запустить его (теоретически 8.0, но это было заменено 8.5).

Для исправления используйте Tomcat 8.5 или вернитесь к версии Spring Boot 1.5.

См. Также: Использование Spring Boot 2.0 с Tomcat 7.0.82

0 голосов
/ 16 октября 2019

Пожалуйста, в вашем pom.xml, попробуйте удалить это:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <scope>provided</scope>
</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</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

И попробуйте еще раз.

Это гарантирует, что вы исключите встроенный Tomcat из дерева зависимостей в вашем проекте.

ОБНОВЛЕНИЕ

ДобавьтеAPI Servet в соответствии с вашим путем к классу. Ошибка в комментариях происходит из-за того, что tomcat (с реализацией и спецификацией API сервлета в качестве транзитивной зависимости) был удален, поэтому в вашем пути к классам отсутствует API сервлетов

Добавьте спецификацию API сервлетов 3.0.1 каквы используете Tomcat 7

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...