【问题标题】:Spring Boot Scheduler Illegal access exception tomcatSpring Boot Scheduler非法访问异常tomcat
【发布时间】:2021-04-07 00:55:16
【问题描述】:

我有一个在专用 tomcat 服务器上运行的 spring boot war 应用程序。我在该应用程序中有一个计划任务:
@Scheduled(cron = "0 0 4 15/1 3/10 ?")

当我关闭 tomcat 服务器(在我的 Intellij IDEA 中)时,我得到了这个堆栈跟踪:

30-Dec-2020 15:01:02.191 INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
30-Dec-2020 15:01:02.392 INFO [quartzScheduler_Worker-9] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.core.status.WarnStatus]. The following stack trace is thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access.
    java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.core.status.WarnStatus]. 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:1385)
        at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1373)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1226)
        at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
        at ch.qos.logback.classic.LoggerContext.noAppenderDefinedWarning(LoggerContext.java:186)
        at ch.qos.logback.classic.Logger.callAppenders(Logger.java:264)
        at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
        at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
        at ch.qos.logback.classic.Logger.debug(Logger.java:482)
        at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:612)
Exception in thread "quartzScheduler_Worker-9" java.lang.NoClassDefFoundError: ch/qos/logback/core/status/WarnStatus
    at ch.qos.logback.classic.LoggerContext.noAppenderDefinedWarning(LoggerContext.java:186)
    at ch.qos.logback.classic.Logger.callAppenders(Logger.java:264)
    at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
    at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:383)
    at ch.qos.logback.classic.Logger.debug(Logger.java:482)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:612)
Caused by: java.lang.ClassNotFoundException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.core.status.WarnStatus]. 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:1375)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1226)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
    ... 6 more
Caused by: java.lang.IllegalStateException: Illegal access: this web application instance has been stopped already. Could not load [ch.qos.logback.core.status.WarnStatus]. 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:1385)
    at org.apache.catalina.loader.WebappClassLoaderBase.checkStateForClassLoading(WebappClassLoaderBase.java:1373)
    ... 8 more
30-Dec-2020 15:01:12.202 WARNING [main] org.apache.tomcat.util.net.Acceptor.stop The acceptor thread [http-nio-8080-Acceptor] did not stop cleanly
30-Dec-2020 15:01:12.202 INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]

这种行为是故意的吗?

编辑:
正如@Andres Sacco 正确推断的那样,将其添加到我的 pom 中解决了这个问题:

<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>

【问题讨论】:

  • 我不这么认为,因为错误是“ClassNotFoundException”,在某些情况下会出现异常但没有这个异常。你的项目中有 logback-core 依赖吗?如果您与同一库的 2 个版本有冲突,还请检查“mvn dependency:tree”
  • 谢谢。添加此依赖项解决了该问题。奇怪...
  • 在某些奇怪的情况下,库需要将此依赖标记为“已提供”而不包括在内,因此您需要在 pom 中添加。

标签: spring spring-boot quartz-scheduler


【解决方案1】:

解决这个问题的方法是添加库“logback-core”,因为你的 pom 文件中不存在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 1970-01-01
    • 2020-03-30
    • 2019-11-05
    • 2016-01-14
    • 2020-03-16
    • 2017-09-25
    • 2020-07-27
    相关资源
    最近更新 更多