gpt4 book ai didi

mysql - 日志记录级别低,导致关闭 Hook 无法正常运行

转载 作者:行者123 更新时间:2023-11-29 10:51:55 25 4
gpt4 key购买 nike

我使用 MariaDb4j 库进行集成测试,它注册了一个关闭钩子(Hook),这样:

    protected void cleanupOnExit() {
String threadName = "Shutdown Hook Deletion Thread for Temporary DB " + dataDir.toString();
final DB db = this;
Runtime.getRuntime().addShutdownHook(new Thread(threadName) {

@Override
public void run() {
// ManagedProcess DestroyOnShutdown ProcessDestroyer does
// something similar, but it shouldn't hurt to better be save
// than sorry and do it again ourselves here as well.
try {
// Shut up and don't log if it was already stop() before
if (mysqldProcess != null && mysqldProcess.isAlive()) {
logger.info("cleanupOnExit() ShutdownHook now stopping database");
db.stop();
}
} catch (ManagedProcessException e) {
logger.warn("cleanupOnExit() ShutdownHook: An error occurred while stopping the database", e);
}

if (dataDir.exists() && Util.isTemporaryDirectory(dataDir.getAbsolutePath())) {
logger.info("cleanupOnExit() ShutdownHook quietly deleting temporary DB data directory: " + dataDir);
FileUtils.deleteQuietly(dataDir);
}
if (baseDir.exists() && Util.isTemporaryDirectory(baseDir.getAbsolutePath())) {
logger.info("cleanupOnExit() ShutdownHook quietly deleting temporary DB base directory: " + baseDir);
FileUtils.deleteQuietly(baseDir);
}
}
});
}

这工作正常。但后来我添加了 Logback 并创建了一个控制台附加程序。

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>${defaultPattern}</Pattern>
</encoder>
</appender>

<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>

如果我将日志记录级别设置为 WARN 或 ERROR,它仍然可以正常工作,但是当我将其设置为 INFO 或更低时,我会收到此异常:

Exception: java.lang.IllegalStateException thrown from the UncaughtExceptionHandler in thread "Shutdown Hook Deletion Thread for Temporary DB /var/folders/t5/lr8ytf257hb9_649cjp9hkn40000gn/T/MariaDB4j/data/3306"

“Shutdown Hook Deletion Thread for Temporary DB...”是上面第一段代码中注册的线程的名称。

结果是我留下了一个正在运行的 mysqld 进程。这会阻止测试再次运行,因为 MariaDB4j 会提示它并且不会启动新的数据库。

一旦我终止了 mysqld 进程,我就可以再次运行我的测试,但随后会发生同样的事情。

我认为这是 JVM 问题。我不明白日志记录级别如何阻止关闭 Hook 正常工作。

我在集成测试中使用 MariaDB4j。当我使用 IntelliJ 或 Eclipse 运行它们时,不会出现此错误。我只有在使用 gradle 运行它们时才会得到它(作为构建任务的一部分)。

可能是什么原因导致的以及如何解决它?

最佳答案

我也遇到过类似的问题。这是由 Gradle 问题引起的,描述为 there .

可以通过将Gradle降级到3.2版本或者升级到3.5版本来解决。

关于mysql - 日志记录级别低,导致关闭 Hook 无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43582793/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com