简体   繁体   English

Spring 在 Tomcat 10 问题上启动 2.x

[英]Spring Boot 2.x on Tomcat 10 Issue

I'm trying to deploy a war file in a Tomcat Docker container, but always get 404 Not Found page.我正在尝试在 Tomcat Docker 容器中部署战争文件,但总是得到404 Not Found页面。 I created the Spring Boot project by following Intellij Tutorial , and it works fine on my machine locally.我按照Intellij Tutorial创建了 Spring Boot 项目,它在我的本地机器上运行良好。

Here is my Dockerfile:这是我的 Dockerfile:

FROM tomcat:latest
ADD WebTutorial.war /usr/local/tomcat/webapps/ROOT.war

I use the following command to build the image and run container:我使用以下命令构建映像并运行容器:

$ docker build -t sp-tomcat .
$ docker run -it -p 8080:8080 --name sp-tomcat sp-tomcat

After the container is running, I logged into the container and see the war file has been deployed (I suppose):容器运行后,我登录到容器中,看到war文件已经部署(我想):
在此处输入图像描述

Here is the log output:这是日志 output:

21-Dec-2021 07:41:35.819 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/10.0.14
21-Dec-2021 07:41:35.821 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 2 2021 22:01:36 UTC
21-Dec-2021 07:41:35.821 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.0.14.0
21-Dec-2021 07:41:35.821 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.10.76-linuxkit
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          aarch64
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/local/openjdk-11
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           11.0.13+8
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
21-Dec-2021 07:41:35.822 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
21-Dec-2021 07:41:35.829 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
21-Dec-2021 07:41:35.830 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
21-Dec-2021 07:41:35.830 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
21-Dec-2021 07:41:35.830 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
21-Dec-2021 07:41:35.830 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
21-Dec-2021 07:41:35.831 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
21-Dec-2021 07:41:35.832 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
21-Dec-2021 07:41:35.833 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1k  25 Mar 2021]
21-Dec-2021 07:41:35.979 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
21-Dec-2021 07:41:35.990 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [268] milliseconds
21-Dec-2021 07:41:36.018 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
21-Dec-2021 07:41:36.018 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.14]
21-Dec-2021 07:41:36.024 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
21-Dec-2021 07:41:36.576 INFO [main] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
21-Dec-2021 07:41:36.596 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/ROOT.war] has finished in [572] ms
21-Dec-2021 07:41:36.599 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
21-Dec-2021 07:41:36.607 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [617] milliseconds

But there is no luck when I try to view the website through the browser.但是当我尝试通过浏览器查看该网站时没有运气。 Can anyone tell me what am I missing?谁能告诉我我错过了什么?

The problem is the fact that you are trying to run the Spring Boot 2.x application on Tomcat 10 which is not yet supported.问题是您尝试在 Tomcat 10 上运行 Spring Boot 2.x 应用程序,但该应用程序尚不受支持。 One of the biggest changes of the Tomcat 10 was Tomcat 10 的最大变化之一是

Migration from Java EE to Jakarta EE as part of the transfer of Java EE to the Eclipse Foundation, the primary package for all implemented APIs has changed from javax.* to jakarta.*. Migration from Java EE to Jakarta EE as part of the transfer of Java EE to the Eclipse Foundation, the primary package for all implemented APIs has changed from javax.* to jakarta.*. This will almost certainly require code changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later.这几乎肯定需要更改代码以使应用程序能够从 Tomcat 9 及更早版本迁移到 Tomcat 10 及更高版本。

So all of the APIs which are used by Spring Framework are based on the older javax.* and new jakarta.* will be supported in Spring Framework 6 and Spring Boot 3 late 2022 )) More details here因此,Spring 框架使用的所有 API 都是基于旧的javax.*和新的jakarta.*将在 Spring 框架 6 和 Z38008DD81C2F4D7985ECF36E0CE8AF1D1Z 中得到支持)更多详细信息( 此处为 Boot 36E0CE8AF1D1)

What you need to do is just adjust the Dockerfile to run the application of the Tomcat 9. This one will work if you are on Java 17您需要做的只是调整 Dockerfile 以运行 Tomcat 9 的应用程序。如果您在 Java 17 上,这个将起作用

FROM tomcat:9.0-jre17-temurin
ADD WebTutorial.war /usr/local/tomcat/webapps/ROOT.war

i had similar requirement to migrate from tomcat 9 to tomcat 10 with spring 2.2.4 (java 8), as we know tomcat 9 is supported with java EE and tomcat 10 onwards JAKARATA EE api. i had similar requirement to migrate from tomcat 9 to tomcat 10 with spring 2.2.4 (java 8), as we know tomcat 9 is supported with java EE and tomcat 10 onwards JAKARATA EE api.

so only thing as of now we can do is migrate using apache migration tool.所以目前我们唯一能做的就是使用 apache 迁移工具进行迁移。

Step 1: after building the war file that is compatable with tomcat 9.第1步:构建与tomcat 9兼容的war文件后。

Step 2: download the jar https://dlcdn.apache.org/tomcat/jakartaee-migration/v1.0.0/binaries/jakartaee-migration-1.0.0-shaded.jar copy to some folder Step 2: download the jar https://dlcdn.apache.org/tomcat/jakartaee-migration/v1.0.0/binaries/jakartaee-migration-1.0.0-shaded.jar copy to some folder

Step 3: run the following the command.第三步:运行以下命令。

java  -jar jakartaee-migration-1.0.0-shaded.jar old.war new.war

Note : required class are made compatible with the above tool.

Step 4: done.第4步:完成。 deploy the new.war to tomcat 10 webapps folder.将 new.war 部署到 tomcat 10 webapps 文件夹。

may be this is helpful.可能这是有帮助的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM