将应用程序部署到 tomcat 服务器时,Spring-boot 的内置记录器出现问题
Having an issue with Spring-boot's built-in logger when deploying app to tomcat server
我正在使用 MongoDB 数据库构建 Spring 启动应用程序,当应用程序部署到服务器并开始记录时,我 运行 遇到了问题。我在互联网上做了一些挖掘,我得到的所有答案是我需要以下 Maven 依赖项并进行安装。我已经这样做了,不幸的是问题仍然存在。
我目前正在使用 MongoDB 版本 4.4.11 和 Spring-boot 版本 2.6.1
pom.xml
<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>
<parent>
<groupId>com.myproject</groupId>
<artifactId>backend</artifactId>
<version>3.2.0.RELEASE</version>
</parent>
<artifactId>pe</artifactId>
<packaging>war</packaging>
<name>myproject Backend Pe</name>
<dependencies>
<dependency>
<groupId>com.myproject</groupId>
<artifactId>core</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<start-class>com.myproject.mobileplatform_backend.app.Application</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>pe</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<!-- installs node modules -->
<execution>
<id>npm install</id>
<goals>
<goal>exec</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<executable>npm</executable>
<arguments>
<argument>install</argument>
</arguments>
<workingDirectory>${basedir}/src/main/frontend</workingDirectory>
</configuration>
</execution>
<!-- builds frontend -->
<execution>
<id>angular build</id>
<goals>
<goal>exec</goal>
</goals>
<phase>compile</phase>
<configuration>
<executable>ng</executable>
<arguments>
<argument>build</argument>
<argument>--prod</argument>
<argument>--deploy-url</argument>
<argument>dist/</argument>
</arguments>
<workingDirectory>${basedir}/src/main/frontend</workingDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
从本地主机读取..log:
14-Jan-2022 11:41:57.058 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
14-Jan-2022 11:42:15.809 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializer detected on classpath
14-Jan-2022 11:42:24.270 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring embedded WebApplicationContext
14-Jan-2022 11:42:32.293 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [errorPageSecurityFilter]
java.lang.AbstractMethodError
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:112)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4590)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1842)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
14-Jan-2022 11:42:32.323 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
部署到服务器时出错:
Exception in thread "cluster-ClusterId{value='61dde73d6257ab22798db558', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
at ch.qos.logback.classic.Logger.info(Logger.java:595)
at com.mongodb.diagnostics.logging.SLF4JLogger.info(SLF4JLogger.java:76)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.logStateChange(DefaultServerMonitor.java:266)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:164)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.classic.spi.ThrowableProxy]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1301)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1158)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
... 8 more
Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.classic.spi.ThrowableProxy]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1311)
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1299)
... 10 more
Exception in thread "cluster-ClusterId{value='61dde7416257ab22798db559', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
at ch.qos.logback.classic.Logger.info(Logger.java:595)
at com.mongodb.diagnostics.logging.SLF4JLogger.info(SLF4JLogger.java:76)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.logStateChange(DefaultServerMonitor.java:266)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:164)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "cluster-ClusterId{value='61dde7416257ab22798db55a', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
at ch.qos.logback.classic.Logger.info(Logger.java:595)
at com.mongodb.diagnostics.logging.SLF4JLogger.info(SLF4JLogger.java:76)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.logStateChange(DefaultServerMonitor.java:266)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:164)
at java.lang.Thread.run(Thread.java:745)
第二个错误:
Exception in thread "cluster-ClusterId{value='61e1a55b4e705712d5c92121', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: com/mongodb/internal/connection/DecimalFormatHelper
at com.mongodb.connection.ServerDescription.getRoundTripFormattedInMilliseconds(ServerDescription.java:1041)
at com.mongodb.connection.ServerDescription.getShortDescription(ServerDescription.java:1016)
at com.mongodb.connection.ClusterDescription.getShortDescription(ClusterDescription.java:327)
at com.mongodb.internal.connection.BaseCluster.updateDescription(BaseCluster.java:245)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:125)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:116)
at com.mongodb.internal.connection.SingleServerCluster.access0(SingleServerCluster.java:41)
at com.mongodb.internal.connection.SingleServerCluster$DefaultServerDescriptionChangedListener.serverDescriptionChanged(SingleServerCluster.java:107)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.updateDescription(DefaultSdamServerDescriptionManager.java:127)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.update(DefaultSdamServerDescriptionManager.java:81)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:165)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [com.mongodb.internal.connection.DecimalFormatHelper]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1301)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1158)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
... 12 more
Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [com.mongodb.internal.connection.DecimalFormatHelper]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1311)
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1299)
... 14 more
Exception in thread "cluster-ClusterId{value='61e1a55c4e705712d5c92122', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: com/mongodb/internal/connection/DecimalFormatHelper
at com.mongodb.connection.ServerDescription.getRoundTripFormattedInMilliseconds(ServerDescription.java:1041)
at com.mongodb.connection.ServerDescription.getShortDescription(ServerDescription.java:1016)
at com.mongodb.connection.ClusterDescription.getShortDescription(ClusterDescription.java:327)
at com.mongodb.internal.connection.BaseCluster.updateDescription(BaseCluster.java:245)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:125)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:116)
at com.mongodb.internal.connection.SingleServerCluster.access0(SingleServerCluster.java:41)
at com.mongodb.internal.connection.SingleServerCluster$DefaultServerDescriptionChangedListener.serverDescriptionChanged(SingleServerCluster.java:107)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.updateDescription(DefaultSdamServerDescriptionManager.java:127)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.update(DefaultSdamServerDescriptionManager.java:81)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:165)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "cluster-ClusterId{value='61e1a5544e705712d5c92120', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: com/mongodb/internal/connection/DecimalFormatHelper
at com.mongodb.connection.ServerDescription.getRoundTripFormattedInMilliseconds(ServerDescription.java:1041)
at com.mongodb.connection.ServerDescription.getShortDescription(ServerDescription.java:1016)
at com.mongodb.connection.ClusterDescription.getShortDescription(ClusterDescription.java:327)
at com.mongodb.internal.connection.BaseCluster.updateDescription(BaseCluster.java:245)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:125)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:116)
at com.mongodb.internal.connection.SingleServerCluster.access0(SingleServerCluster.java:41)
at com.mongodb.internal.connection.SingleServerCluster$DefaultServerDescriptionChangedListener.serverDescriptionChanged(SingleServerCluster.java:107)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.updateDescription(DefaultSdamServerDescriptionManager.java:127)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.update(DefaultSdamServerDescriptionManager.java:81)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:165)
at java.lang.Thread.run(Thread.java:745)
我认为您面临的主要问题与 localhost.log
中出现的错误有关:
14-Jan-2022 11:42:32.293 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [errorPageSecurityFilter]
java.lang.AbstractMethodError
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
该错误与 Tomcat 无法成功初始化 ErrorPageSecurityFilter 有关。
此过滤器试图防止未经授权访问应用程序错误页面。
它是在 Spring Boot 2.6.0 中引入的。
过滤器最初是作为 Servlet 4.0 HttpFilter
。
如您在 history of changes of the component 中所见,这一事实导致了不同的更改,以便为不支持 Servlet 4.0 版本的容器提供支持。
这些更改已记录在不同的问题中,主要是 this, although there are other related ones 1 2 3。
基本上,您可以查看上述组件的历史记录,他们 first 重构过滤器以实现 Filter
而不是扩展 HttpFilter
.
在 Servlet 4 版本中,Filter
接口为 ErrorPageSecurityFilter
本身的 init
and destroy
. To mimic this behavior and make it Servlet 3.x compatible, in a later change, the Spring developers provided a no-op implementation of init
提供了默认方法实现。
如您在更改日志中所见,最后一个问题已在 Spring Boot 2.6.2 中修复。
在应用程序启动时,Tomcat 找到并尝试初始化 ErrorPageSecurityFilter
过滤器,但您可能正在使用 a version of Tomcat still not Servlet 4 version compliant,并且根据 Spring 启动的版本,您是使用 2.6.1,此过滤器不提供 init
实现,这就是 Tomcat 抱怨 AbstractMethodError
.
的原因
为了解决问题,请考虑将您的应用程序依赖项更新到 Spring Boot 2.6.2.
我认为一旦更新,与部署相关的不同错误就会消失,它们似乎是由线程或 class 加载问题引起的 Tomcat 由于 ErrorPageSecurityFilter
相关错误。
这可能是因为 spring-data 和 db-driver 依赖的版本不兼容。请检查 db-driver 的版本是否与提供的 spring-data 依赖项兼容。
试试这个版本:
MongoDB 4.4.11
的 SpringBoot 2.5.6
如果需要 SpringBoot 2.6.1,请尝试:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
对于 mongo 依赖。
好像是这个问题:
https://gitmetadata.com/repo/spring-projects/spring-boot/issues/29135
您可以在您的 pom 中强制使用 tomcat 9 和以下 属性:
<properties>
<tomcat.version>9.0.55</tomcat.version>
<properties>
虽然 tomcat spring-boot 2.6.1 的嵌入式版本应该是 9.0.55
我正在使用 MongoDB 数据库构建 Spring 启动应用程序,当应用程序部署到服务器并开始记录时,我 运行 遇到了问题。我在互联网上做了一些挖掘,我得到的所有答案是我需要以下 Maven 依赖项并进行安装。我已经这样做了,不幸的是问题仍然存在。
我目前正在使用 MongoDB 版本 4.4.11 和 Spring-boot 版本 2.6.1
pom.xml
<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>
<parent>
<groupId>com.myproject</groupId>
<artifactId>backend</artifactId>
<version>3.2.0.RELEASE</version>
</parent>
<artifactId>pe</artifactId>
<packaging>war</packaging>
<name>myproject Backend Pe</name>
<dependencies>
<dependency>
<groupId>com.myproject</groupId>
<artifactId>core</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<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-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-properties-migrator</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
<properties>
<start-class>com.myproject.mobileplatform_backend.app.Application</start-class>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>pe</warName>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<!-- installs node modules -->
<execution>
<id>npm install</id>
<goals>
<goal>exec</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<executable>npm</executable>
<arguments>
<argument>install</argument>
</arguments>
<workingDirectory>${basedir}/src/main/frontend</workingDirectory>
</configuration>
</execution>
<!-- builds frontend -->
<execution>
<id>angular build</id>
<goals>
<goal>exec</goal>
</goals>
<phase>compile</phase>
<configuration>
<executable>ng</executable>
<arguments>
<argument>build</argument>
<argument>--prod</argument>
<argument>--deploy-url</argument>
<argument>dist/</argument>
</arguments>
<workingDirectory>${basedir}/src/main/frontend</workingDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
从本地主机读取..log:
14-Jan-2022 11:41:57.058 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
14-Jan-2022 11:42:15.809 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log 1 Spring WebApplicationInitializer detected on classpath
14-Jan-2022 11:42:24.270 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring embedded WebApplicationContext
14-Jan-2022 11:42:32.293 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [errorPageSecurityFilter]
java.lang.AbstractMethodError
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:112)
at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4590)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:630)
at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1842)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
14-Jan-2022 11:42:32.323 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
部署到服务器时出错:
Exception in thread "cluster-ClusterId{value='61dde73d6257ab22798db558', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
at ch.qos.logback.classic.Logger.info(Logger.java:595)
at com.mongodb.diagnostics.logging.SLF4JLogger.info(SLF4JLogger.java:76)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.logStateChange(DefaultServerMonitor.java:266)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:164)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.classic.spi.ThrowableProxy]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1301)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1158)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
... 8 more
Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.classic.spi.ThrowableProxy]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1311)
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1299)
... 10 more
Exception in thread "cluster-ClusterId{value='61dde7416257ab22798db559', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
at ch.qos.logback.classic.Logger.info(Logger.java:595)
at com.mongodb.diagnostics.logging.SLF4JLogger.info(SLF4JLogger.java:76)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.logStateChange(DefaultServerMonitor.java:266)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:164)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "cluster-ClusterId{value='61dde7416257ab22798db55a', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:119)
at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:419)
at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
at ch.qos.logback.classic.Logger.info(Logger.java:595)
at com.mongodb.diagnostics.logging.SLF4JLogger.info(SLF4JLogger.java:76)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.logStateChange(DefaultServerMonitor.java:266)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:164)
at java.lang.Thread.run(Thread.java:745)
第二个错误:
Exception in thread "cluster-ClusterId{value='61e1a55b4e705712d5c92121', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: com/mongodb/internal/connection/DecimalFormatHelper
at com.mongodb.connection.ServerDescription.getRoundTripFormattedInMilliseconds(ServerDescription.java:1041)
at com.mongodb.connection.ServerDescription.getShortDescription(ServerDescription.java:1016)
at com.mongodb.connection.ClusterDescription.getShortDescription(ClusterDescription.java:327)
at com.mongodb.internal.connection.BaseCluster.updateDescription(BaseCluster.java:245)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:125)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:116)
at com.mongodb.internal.connection.SingleServerCluster.access0(SingleServerCluster.java:41)
at com.mongodb.internal.connection.SingleServerCluster$DefaultServerDescriptionChangedListener.serverDescriptionChanged(SingleServerCluster.java:107)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.updateDescription(DefaultSdamServerDescriptionManager.java:127)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.update(DefaultSdamServerDescriptionManager.java:81)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:165)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [com.mongodb.internal.connection.DecimalFormatHelper]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1301)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1158)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1119)
... 12 more
Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [com.mongodb.internal.connection.DecimalFormatHelper]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading(WebappClassLoaderBase.java:1311)
at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1299)
... 14 more
Exception in thread "cluster-ClusterId{value='61e1a55c4e705712d5c92122', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: com/mongodb/internal/connection/DecimalFormatHelper
at com.mongodb.connection.ServerDescription.getRoundTripFormattedInMilliseconds(ServerDescription.java:1041)
at com.mongodb.connection.ServerDescription.getShortDescription(ServerDescription.java:1016)
at com.mongodb.connection.ClusterDescription.getShortDescription(ClusterDescription.java:327)
at com.mongodb.internal.connection.BaseCluster.updateDescription(BaseCluster.java:245)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:125)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:116)
at com.mongodb.internal.connection.SingleServerCluster.access0(SingleServerCluster.java:41)
at com.mongodb.internal.connection.SingleServerCluster$DefaultServerDescriptionChangedListener.serverDescriptionChanged(SingleServerCluster.java:107)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.updateDescription(DefaultSdamServerDescriptionManager.java:127)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.update(DefaultSdamServerDescriptionManager.java:81)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:165)
at java.lang.Thread.run(Thread.java:745)
Exception in thread "cluster-ClusterId{value='61e1a5544e705712d5c92120', description='null'}-localhost:27017" java.lang.NoClassDefFoundError: com/mongodb/internal/connection/DecimalFormatHelper
at com.mongodb.connection.ServerDescription.getRoundTripFormattedInMilliseconds(ServerDescription.java:1041)
at com.mongodb.connection.ServerDescription.getShortDescription(ServerDescription.java:1016)
at com.mongodb.connection.ClusterDescription.getShortDescription(ClusterDescription.java:327)
at com.mongodb.internal.connection.BaseCluster.updateDescription(BaseCluster.java:245)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:125)
at com.mongodb.internal.connection.SingleServerCluster.publishDescription(SingleServerCluster.java:116)
at com.mongodb.internal.connection.SingleServerCluster.access0(SingleServerCluster.java:41)
at com.mongodb.internal.connection.SingleServerCluster$DefaultServerDescriptionChangedListener.serverDescriptionChanged(SingleServerCluster.java:107)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.updateDescription(DefaultSdamServerDescriptionManager.java:127)
at com.mongodb.internal.connection.DefaultSdamServerDescriptionManager.update(DefaultSdamServerDescriptionManager.java:81)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:165)
at java.lang.Thread.run(Thread.java:745)
我认为您面临的主要问题与 localhost.log
中出现的错误有关:
14-Jan-2022 11:42:32.293 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [errorPageSecurityFilter]
java.lang.AbstractMethodError
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:285)
该错误与 Tomcat 无法成功初始化 ErrorPageSecurityFilter 有关。
此过滤器试图防止未经授权访问应用程序错误页面。
它是在 Spring Boot 2.6.0 中引入的。
过滤器最初是作为 Servlet 4.0 HttpFilter
。
如您在 history of changes of the component 中所见,这一事实导致了不同的更改,以便为不支持 Servlet 4.0 版本的容器提供支持。
这些更改已记录在不同的问题中,主要是 this, although there are other related ones 1 2 3。
基本上,您可以查看上述组件的历史记录,他们 first 重构过滤器以实现 Filter
而不是扩展 HttpFilter
.
在 Servlet 4 版本中,Filter
接口为 ErrorPageSecurityFilter
本身的 init
and destroy
. To mimic this behavior and make it Servlet 3.x compatible, in a later change, the Spring developers provided a no-op implementation of init
提供了默认方法实现。
如您在更改日志中所见,最后一个问题已在 Spring Boot 2.6.2 中修复。
在应用程序启动时,Tomcat 找到并尝试初始化 ErrorPageSecurityFilter
过滤器,但您可能正在使用 a version of Tomcat still not Servlet 4 version compliant,并且根据 Spring 启动的版本,您是使用 2.6.1,此过滤器不提供 init
实现,这就是 Tomcat 抱怨 AbstractMethodError
.
为了解决问题,请考虑将您的应用程序依赖项更新到 Spring Boot 2.6.2.
我认为一旦更新,与部署相关的不同错误就会消失,它们似乎是由线程或 class 加载问题引起的 Tomcat 由于 ErrorPageSecurityFilter
相关错误。
这可能是因为 spring-data 和 db-driver 依赖的版本不兼容。请检查 db-driver 的版本是否与提供的 spring-data 依赖项兼容。
试试这个版本: MongoDB 4.4.11
的 SpringBoot 2.5.6如果需要 SpringBoot 2.6.1,请尝试:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
对于 mongo 依赖。
好像是这个问题:
https://gitmetadata.com/repo/spring-projects/spring-boot/issues/29135
您可以在您的 pom 中强制使用 tomcat 9 和以下 属性:
<properties>
<tomcat.version>9.0.55</tomcat.version>
<properties>
虽然 tomcat spring-boot 2.6.1 的嵌入式版本应该是 9.0.55