Spring Boot 不在外部 tomcat 上運行
我以前在 Java 1.8 和 Tomcat 8 上使用過 Spring Boot。我最近開始了一個新專案,我升級到 Java 17,Tomcat 10。
我正在嘗試部署為在外部 tomcat 中運行的戰爭,但它不起作用。
我在實際生產環境現有的Java 1.8和Tomcat 8上運行部署專案沒有任何問題。我想你知道如何部署 spring boot 作為戰爭。
我已經閱讀了下面鏈接中的 Spring Boot 官方檔案。 https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto.traditional-deployment.war
我專案的 pom.xml 應用了以下設定。
<packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
和
<configuration>
<mainClass>mypackage.SpringBootCoreApplication</mainClass>
</configuration>
并且SpringBootApplication也配置好了。
@SpringBootApplication
public class SpringBootCoreApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootCoreApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringBootCoreApplication.class, args);
}
}
現在,我運行 Tomcat 部署為戰爭,并出現以下日志。
31-Oct-2022 19:52:47.382 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.
31-Oct-2022 19:52:43.818 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/ROOT.war]
31-Oct-2022 19:52:43.780 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.1.1]
31-Oct-2022 19:52:43.779 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
31-Oct-2022 19:52:43.686 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [961] milliseconds
31-Oct-2022 19:52:43.618 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
31-Oct-2022 19:52:43.069 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.2 15 Mar 2022]
31-Oct-2022 19:52:43.063 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [2.0.1] using APR version [1.7.0].
31-Oct-2022 19:52:43.059 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
31-Oct-2022 19:52:43.059 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
31-Oct-2022 19:52:43.059 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
31-Oct-2022 19:52:43.058 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
31-Oct-2022 19:52:43.057 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
31-Oct-2022 19:52:43.057 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
31-Oct-2022 19:52:43.057 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
31-Oct-2022 19:52:43.033 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /usr/local/tomcat
31-Oct-2022 19:52:43.033 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /usr/local/tomcat
31-Oct-2022 19:52:43.033 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Eclipse Adoptium
31-Oct-2022 19:52:43.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 17.0.4.1 1
31-Oct-2022 19:52:43.032 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /opt/java/openjdk
31-Oct-2022 19:52:43.031 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: amd64
31-Oct-2022 19:52:43.031 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 4.4.180
31-Oct-2022 19:52:43.031 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Linux
31-Oct-2022 19:52:43.030 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 10.1.1.0
31-Oct-2022 19:52:43.030 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Oct 3 2022 12:42:14 UTC
31-Oct-2022 19:52:43.017 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/10.1.1
NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
Using CATALINA_OPTS:
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Using JRE_HOME: /opt/java/openjdk
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_BASE: /usr/local/tomcat
31-Oct-2022 19:52:41.636 INFO [Thread-1] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
31-Oct-2022 19:52:41.627 INFO [Thread-1] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
31-Oct-2022 19:52:41.612 INFO [Thread-1] org.apache.catalina.core.StandardService.stopInternal Stopping service [Catalina]
31-Oct-2022 19:52:41.608 INFO [Thread-1] org.apache.coyote.AbstractProtocol.pause Pausing ProtocolHandler ["http-nio-8080"]
31-Oct-2022 19:48:16.236 INFO [Catalina-utility-2] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/ROOT.war] has finished in [4,098] ms
我記得 Spring Boot 不會以這樣的日志結尾。該專案正在運行,但 spring boot 似乎沒有運行。
日志顯示連接成功,但實際上并沒有連接上。
看了Spring Boot官方檔案,很多問答,博文,都解決不了。
我不知道我配置錯了什么。請幫我
uj5u.com熱心網友回復:
我找到了原因。我寫這篇文章是為了那些因為同樣的原因而苦苦掙扎的人。
升級到 Tomcat 10 是個問題。
Tomcat10 是目前不支持的 JakartaEE 規范的實作。Spring(和 Spring Boot)目前只支持 JavaEE,不支持 JakartaEE。計劃在今年晚些時候為 Spring6 和 SpringBoot3 提供 Jakarta EE 支持。
有兩種選擇。
- 將war部署到
webapps-javaee目錄而不是webapps目錄。Tomcat 使用轉換工具自動轉換。我用這個解決了同樣的問題。 - 使用支持 Java EE 的 Tomcat 9
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/537018.html
