[NIO.2] 第三十九篇 实现文件监控服务

NIO 2 监控服务实现
要实现监控服务需要有几个步骤。在本文中,你将会看到实现监控服务的主要步骤,并且开发监控目录创建、删除和修改的应用。每个步骤都会有代码和实例进行讲解,文章的最后将会把所有步骤合在一起,编写一个完整的应用。

[b][size=x-large]创建 WatchService[/size][/b]

最开始,需要创建 WatchService 用于监控文件系统。可以调用 FileSystem.newWatchService() 方法来创建这个对象:

WatchService watchService = FileSystems.getDefault().newWatchService();


现在我们有了 WatchService 对象。

[b][size=x-large]注册监控对象[/size][/b]

每个被监控对象都需要注册后才能被监控。任何实现 Watchable 接口的对象都可以被注册。在我们的例子中,将会注册目录的 Path 对象。除了监控对象外,监控服务还需要设置需要监控的事件类型。所有支持的监控事件类型都映射到 StandardWatchEventKinds 类中的 Kind<Path> 类型的常量上。

[list]
[*] StandardWatchEventKinds.ENTRY_CREATE:创建目录实体。当目录中的文件重命名和移动文件到此目录时,也会触发 ENTRY_CREATE 事件。
[*] StandardWatchEventKinds.ENTRY_DELETE:删除目录实体。当目录中的文件重命名和移动文件出此目录时,也会触发 ENTRY_DELETE 事件。
[*] StandardWatchEventKinds.ENTRY_MODIFY:修改目录实体。修改事件在具有平台相关性,但是无论什么平台,只要修改了文件内容,就会触发这个事件。在有的平台上,改变文件属性也会触发这个事件。
[*] StandardWatchEventKinds.OVERFLOW:表示事件可能丢失或遗弃。在注册的时候不需要监听这个事件。
[/list]

Path 类实现了 Watchable 接口,因此可以调用 Watchable.register() 方法。这个方法有两个重载方法,第一个重载方法接受两个参数,第一个参数是 WatchService 对象,第二个是可变长参数,用于设置监控哪些事件。第二个重载方法除了这两个参数外,还接受一个参数,用于设置目录如何注册的限制符,但是目前 NIO.2 还没有提供标准限制符。

下面的代码将会注册 C:\rafaelnadal 目录,并监控创建、删除和修改事件:

import static java.nio.file.StandardWatchEventKinds.*; 

final Path path = Paths.get("C:/rafaelnadal");
WatchService watchService = FileSystems.getDefault().newWatchService();

path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);

watchService.close();


你将会收到注册目录的 WatchKey 对象,这是使用 WatchService 注册后被监控对象的唯一标识。你可以选择是否保留这个引用。在事件被触发后,WatchService 将会返回相关的 WatchKey。具体内容参看下文。

[b][size=x-large]等待传入事件[/size][/b]

等待传入事件需要一个无限循环。当事件被触发,监控服务将会把 WatchKey 放入监控队列中。无限循环可能是下面的类型:

while(true){ 
//接收并处理传入事件

}


或者可能是下面的类型:

for(;;){ 
//接收并处理传入事件

}


[b][size=x-large]获取 WatchKey[/size][/b]

从队列中获取 WatchKey 可以调用 WatchService 中的三个方法其中一个。三个方法功能都是获取队列中的下一个 Key 并且将它从队列中删除。不同的地方是如果没有可用的 Key 的处理方式。下面看看这三个方法:

[list]
[*] poll():如果没有可用的 key,将立即返回 null 值。
[*] poll(long, TimeUnit):如果没有可用的 key,则等待一个时间之后再试一次,如果依然没有可用的 key 则返回 null 值。等待时间是第一个参数,第二个参数是时间的单位(秒、分钟、小时或其它)。
[*] take():如果没有可用的 key,将一直等待,直到队列中有可用的 key或者无限循环结束。
[/list]

下面的代码将演示如何在无限循环中调用这三个方法:

//没有参数的 poll 方法
while (true) {
//retrieve and remove the next watch key
final WatchKey key = watchService.poll();
//the thread flow gets here immediately with an available key or a null value

}

//有参数的 poll 方法
while (true) {
//retrieve and remove the next watch key
final WatchKey key = watchService.poll(10, TimeUnit.SECONDS);
//the thread flow gets here immediately if a key is available, or after 10 seconds
//with an available key or null value

}

//take 方法
while (true) {
//retrieve and remove the next watch key
final WatchKey key = watchService.take();
//the thread flow gets here immediately if a key is available, or it will wait until a
//key is available, or the loop breaks

}


记住,每个 key 都有自己的状态,分别是就绪(ready),信号(signaled),无效(invalid):

[list]
[*] 就绪:当初次创建的时候,key 就处于就绪状态,意味着已经准备好接收事件。
[*] 信号:当 key 处于信号状态,表示至少有一个事件发生,并且 key 已在队列中等待。如果 key 处于信号状态,那么将会一直保持这个状态,直到调用 reset() 方法将 key 设置为就绪状态。如果 key 在信号状态的同时又发生了多个事件,那么这些事件将进入等待队列,key 本身所在的队列并不会重排。
[*] 无效:当 key 处于无效状态时,表示它不再是活跃状态。key 会一直保持有效状态,直到显式调用 cancel() 方法、或者目录变得不可访问、或者监控服务关闭,key 将会变为无效状态。可以调用 WatchKey.isValid() 方法来测试 key 是否处于有效状态。
[/list]

注意,WatchKey 是线程安全的。

[b][size=x-large]获取事件[/size][/b]

当一个 key 处于信号状态,表示上面有一个或多个事件需要关注。可以调用 WatchKey.pollEvents() 方法获取并删除全部事件。这个方法不需要参数,调用后返回包含事件的 List 对象,List 中的类型是 WatchEvent<T>,它表示注册到 WatchService 中的对象上的事件。

如果没有获取到事件,pollEvents() 并不会等待,而是直接返回一个空的 List。

下面的代码将会从 key 获取事件,并遍历所有事件:


while (true) {
//retrieve and remove the next watch key
final WatchKey key = watchService.take();

//get list of pending events for the watch key
for (WatchEvent<?> watchEvent : key.pollEvents()) {

}

}


WatchEvent 是不可变对象并且是线程安全的。

[b][size=x-large]获取事件属性[/size][/b]

WatchEvent<T> 中保存了事件的属性,可以调用 WatchEvent.kind() 方法获取事件类型,这个方法将返回 Kind<T> 类型的对象。

下面的代码演示了如何获取事件属性:


//get list of pending events for the watch key
for (WatchEvent<?> watchEvent : key.pollEvents()) {

//get the kind of event (create, modify, delete)
final Kind<?> kind = watchEvent.kind();

//handle OVERFLOW event
if (kind == StandardWatchEventKinds.OVERFLOW) {
continue;
}

System.out.println(kind);
}


除了事件类型,还可以调用 WatchEvent.count() 方法获取事件被观察次数(重复事件)。返回值是 int:

System.out.println(watchEvent.count());

[b][size=x-large]
获取事件的文件名[/size][/b]

当文件的删除、创建或修改事件被触发后,我们可以通过事件的上下文获取文件名称(文件名存储在事件上下文中)。可以调用 WatchEvent.context() 方法来实现这个功能:


final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;
final Path filename = watchEventPath.context();

System.out.println(filename);


[b][size=x-large]将 Key 重置为就绪状态[/size][/b]

如果 key 处于信号状态,那么将一直保持,直到调用 reset() 将其重置为就绪状态。如果 reset() 方法返回 true,表示 key 有效并且已经被重置,返回 false 表示重置失败,原因有可能是 key 不再有效。有的时候,如果 key 不再有效的话,我们需要跳出循环,例如,只有一个 key 的时候,没有必要再继续留在无限循环中,如下代码所示:


while(true){

//reset the key
boolean valid = key.reset();

//exit loop if the key is not valid (if the directory was deleted, for example)
if (!valid) {
break;
}
}


注意,如果忘记调用 reset() 或者调用 reset() 失败,那么 Key 将不再接收任何事件!

[b][size=x-large]关闭 WatchService[/size][/b]

当线程结束或监控服务关闭的时候,需要显式的调用 WatchService.close() 方法,或者将 WatchService 放入 try 语句块中:

try (WatchService watchService = FileSystems.getDefault().newWatchService()) {

}


当 WatchService 关闭后,当前的操作将会取消并且失效。如果服务关闭,任何操作都会抛出 ClosedWatchServiceException 异常。如果服务已经关闭,再调用这个方法不会有任何效果。

[b][size=x-large]综合运用[/size][/b]

下面的代码将会监控 C:\rafaelnadal 目录的创建、删除和修改事件。并且打印出事件类型和文件名。当程序运行后,可以手动创建、删除和修改此目录下的文件或目录,看看程序运行的效果。注意,此程序只对 C:\rafaelnadal 目录实现监控,其下的子目录并没有被监控。

import java.io.IOException; 
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchEvent.Kind;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

class WatchRafaelNadal {

public void watchRNDir(Path path) throws IOException, InterruptedException {
try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);

//start an infinite loop
while (true) {

//retrieve and remove the next watch key
final WatchKey key = watchService.take();

//get list of pending events for the watch key
for (WatchEvent<?> watchEvent : key.pollEvents()) {
//get the kind of event (create, modify, delete)
final Kind<?> kind = watchEvent.kind();
//handle OVERFLOW event
if (kind == StandardWatchEventKinds.OVERFLOW) {
continue;
}
//get the filename for the event
final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;
final Path filename = watchEventPath.context();
//print it out
System.out.println(kind + " -> " + filename);
}
//reset the key
boolean valid = key.reset();
//exit loop if the key is not valid (if the directory was deleted, for
example)
if (!valid) {
break;
}
}
}
}
}
public class Main {
public static void main(String[] args) {
final Path path = Paths.get("C:/rafaelnadal");
WatchRafaelNadal watch = new WatchRafaelNadal();
try {
watch.watchRNDir(path);
} catch (IOException | InterruptedException ex) {
System.err.println(ex);
}
}
}


注意,这段代码使用了无限循环,因此需要手动结束,或者自行编写一个结束机制。

文章来源:[url]http://www.aptusource.org/2014/04/nio-2-implementing-a-watch-service/[/url]
Abnormal build process termination: "D:\Program Files\IDEA\IntelliJ IDEA 2025.2\jbr\bin\java.exe" -Xmx700m -Djava.awt.headless=true "-Djna.boot.library.path=D:\Program Files\IDEA\IntelliJ IDEA 2025.2/lib/jna/amd64" -Djna.nosys=true -Djna.noclasspath=true --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -Dexternal.project.config=C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\projects\lims.3c898e48\external_build_system -Dcompile.parallel=true -Drebuild.on.dependency.change=true -Didea.IntToIntBtree.page.size=32768 -Djdt.compiler.useSingleThread=true -Daether.connector.resumeDownloads=false -Dio.netty.initialSeedUniquifier=6045328016711105503 -Djps.use.dependency.graph=true -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IntelliJIdea2025.2 "-Didea.home.path=D:/Program Files/IDEA/IntelliJ IDEA 2025.2" -Didea.config.path=C:/Users/Administrator/AppData/Roaming/JetBrains/IntelliJIdea2025.2 -Didea.plugins.path=C:/Users/Administrator/AppData/Roaming/JetBrains/IntelliJIdea2025.2/plugins -Djps.log.dir=C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\log\build-log "-Djps.fallback.jdk.home=D:/Program Files/IDEA/IntelliJ IDEA 2025.2/jbr" -Djps.fallback.jdk.version=21.0.7 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/Administrator/AppData/Local/JetBrains/IntelliJIdea2025.2/compile-server/lims-shly_840d39d1/_temp_ -Djps.backward.ref.index.builder=true -Djps.backward.ref.index.builder.fs.case.sensitive=false "-Djps.kotlin.home=D:\Program Files\IDEA\IntelliJ IDEA 2025.2\plugins\Kotlin\kotlinc" -Dkotlin.incremental.compilation=true -Dkotlin.jps.dumb.mode=true -Dkotlin.jps.enable.lookups.in.dumb.mode=true -Dkotlin.incremental.compilation.js=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path=C:\Users\ADMINI~1\AppData\Local\Temp\kotlin-idea-8690595407329842680-is-running -Dkotlin.incremental.compilation=true -Dkotlin.jps.dumb.mode=true -Dkotlin.jps.enable.lookups.in.dumb.mode=true -Dkotlin.incremental.compilation.js=true -Dkotlin.daemon.enabled -Dkotlin.daemon.client.alive.path=C:\Users\ADMINI~1\AppData\Local\Temp\kotlin-idea-8690595407329842680-is-running -Dide.compiler.maven.path.to.home=E:\maven\apache-maven-3.6.3-bin\repository -Dide.propagate.context=false -Dintellij.platform.log.sync=true -classpath "D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/jps-launcher.jar" org.jetbrains.jps.cmdline.Launcher "D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/jps-builders.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/jps-builders-6.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/jps-javac-extension.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/util-8.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/util_rt.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/platform-loader.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/annotations.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/trove.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/kotlin-metadata.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/protobuf.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/rt/netty-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/jps-model.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/javac2.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/forms_rt.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/util.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/lib-client.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/aether-dependency-resolver.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/maven-resolver-connector-basic.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/maven-resolver-transport-file.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/maven-resolver-transport-http.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/idea_rt.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/JavaEE/lib/jasper-v2-rt.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/Kotlin/lib/jps/kotlin-jps-plugin.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/lib/util-8.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/javaFX/lib/javaFX-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/javaFX/lib/javaFX-common.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/eclipse/lib/eclipse-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/eclipse/lib/eclipse-common.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/JavaEE/lib/jps/javaee-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/platform-langInjection/lib/java-langInjection-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/Groovy/lib/groovy-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/Groovy/lib/groovy-constants-rt.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/maven/lib/maven-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/gradle-java/lib/gradle-jps.jar;D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/JPA/lib/jps/javaee-jpa-jps.jar" org.jetbrains.jps.cmdline.BuildMain 127.0.0.1 49955 dc1fbe86-22cc-4b93-a3a1-50c9392808ed C:/Users/Administrator/AppData/Local/JetBrains/IntelliJIdea2025.2/compile-server Be careful, logger will be shut down earlier than application: Unable to make field private static java.util.IdentityHashMap java.lang.ApplicationShutdownHooks.hooks accessible: module java.base does not "opens java.lang" to unnamed module @682a0b20 Build process started. Classpath: D:/Program Files/IDEA/IntelliJ IDEA 2025.2/plugins/java/lib/jps-launcher.jar JAVAC_PROCESS[STDOUT]: # JAVAC_PROCESS[STDOUT]: # There is insufficient memory for the Java Runtime Environment to continue. JAVAC_PROCESS[STDOUT]: # Native memory allocation (malloc) failed to allocate 375328 bytes for Chunk::new JAVAC_PROCESS[STDOUT]: # An error report file with more information is saved as: JAVAC_PROCESS[STDOUT]: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\hs_err_pid22588.log JAVAC_PROCESS[STDOUT]: [thread 21232 also had an error] JAVAC_PROCESS[STDOUT]: # JAVAC_PROCESS[STDOUT]: # There is insufficient memory for the Java Runtime Environment to continue. JAVAC_PROCESS[STDOUT]: # Native memory allocation (malloc) failed to allocate 32744 bytes for ChunkPool::allocate JAVAC_PROCESS[STDOUT]: # An error report file with more information is saved as: JAVAC_PROCESS[STDOUT]: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\hs_err_pid27164.log JAVAC_PROCESS[STDOUT]: [thread 2064 also had an error] JAVAC_PROCESS[STDOUT]: # JAVAC_PROCESS[STDOUT]: # Compiler replay data is saved as: JAVAC_PROCESS[STDOUT]: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\replay_pid22588.log 2025-08-26 13:27:42,498 [ 7595] WARN - io.netty.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:444) at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:386) at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:585) at io.netty.channel.nio.NioIoHandler.processSelectedKeysPlain(NioIoHandler.java:530) at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:503) at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:478) at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:203) at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:174) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1123) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) JAVAC_PROCESS[STDOUT]: # JAVAC_PROCESS[STDOUT]: # There is insufficient memory for the Java Runtime Environment to continue. JAVAC_PROCESS[STDOUT]: # Native memory allocation (malloc) failed to allocate 590480 bytes for Chunk::new JAVAC_PROCESS[STDOUT]: # An error report file with more information is saved as: JAVAC_PROCESS[STDOUT]: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\hs_err_pid18280.log JAVAC_PROCESS[STDOUT]: # JAVAC_PROCESS[STDOUT]: # Compiler replay data is saved as: JAVAC_PROCESS[STDOUT]: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\replay_pid27164.log # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (malloc) failed to allocate 319696 bytes. Error detail: Chunk::new # An error report file with more information is saved as: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\hs_err_pid25952.log 2025-08-26 13:27:42,520 [ 7617] WARN - io.netty.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:444) at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:386) at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:585) at io.netty.channel.nio.NioIoHandler.processSelectedKeysPlain(NioIoHandler.java:530) at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:503) at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:478) at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:203) at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:174) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1123) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) JAVAC_PROCESS[STDOUT]: # JAVAC_PROCESS[STDOUT]: # Compiler replay data is saved as: JAVAC_PROCESS[STDOUT]: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\replay_pid18280.log 2025-08-26 13:27:42,593 [ 7690] WARN - io.netty.channel.DefaultChannelPipeline - An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception. java.net.SocketException: Connection reset at java.base/sun.nio.ch.SocketChannelImpl.throwConnectionReset(SocketChannelImpl.java:401) at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:434) at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:255) at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:151) at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:444) at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:386) at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:585) at io.netty.channel.nio.NioIoHandler.processSelectedKeysPlain(NioIoHandler.java:530) at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:503) at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:478) at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:203) at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:174) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1123) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583) # # Compiler replay data is saved as: # C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2025.2\compile-server\replay_pid25952.log 这是什么报错
08-27
java.lang.RuntimeException: java.nio.file.FileSystemException: /opt/ibps-test/upload/undertow6841053707738867624upload: 打开的文件过多 at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.data(MultiPartParserDefinition.java:334) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.util.MultipartParser$IdentityEncoding.handle(MultipartParser.java:365) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.util.MultipartParser$ParseState.entity(MultipartParser.java:290) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.util.MultipartParser$ParseState.parse(MultipartParser.java:131) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.parseBlocking(MultiPartParserDefinition.java:252) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.spec.HttpServletRequestImpl.parseFormData(HttpServletRequestImpl.java:861) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.spec.HttpServletRequestImpl.getParameterMap(HttpServletRequestImpl.java:813) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at com.lc.ibps.cloud.filter.LogFilter.doFilter(LogFilter.java:115) ~[ibps-basic-response-4.0.0-SNAPSHOT.jar:?] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at com.lc.ibps.cloud.filter.HostnameFilter.doFilter(HostnameFilter.java:88) ~[ibps-basic-response-4.0.0-SNAPSHOT.jar:?] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:96) ~[spring-boot-actuator-2.7.17.jar:2.7.17] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.39.jar:5.3.39] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.39.jar:5.3.39] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.39.jar:5.3.39] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at com.lc.ibps.cloud.local.loadbalancer.LoadBalancerClientIpFilter.doFilter(LoadBalancerClientIpFilter.java:52) ~[ibps-basic-loadbalancer-4.0.0-SNAPSHOT.jar:?] at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:67) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:68) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:117) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.SendErrorPageHandler.handleRequest(SendErrorPageHandler.java:52) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:275) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:79) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:134) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:131) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:255) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:79) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:100) ~[undertow-servlet-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18) ~[jboss-threads-3.5.0.Final.jar:3.5.0.Final] at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513) ~[jboss-threads-3.5.0.Final.jar:3.5.0.Final] at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538) ~[jboss-threads-3.5.0.Final.jar:3.5.0.Final] at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282) ~[xnio-api-3.8.9.Final.jar:3.8.9.Final] at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_412] Caused by: java.nio.file.FileSystemException: /opt/ibps-test/upload/undertow6841053707738867624upload: 打开的文件过多 at sun.nio.fs.UnixException.translateToIOException(UnixException.java:91) ~[?:1.8.0_412] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) ~[?:1.8.0_412] at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) ~[?:1.8.0_412] at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214) ~[?:1.8.0_412] at java.nio.file.Files.newByteChannel(Files.java:361) ~[?:1.8.0_412] at java.nio.file.Files.createFile(Files.java:632) ~[?:1.8.0_412] at java.nio.file.TempFileHelper.create(TempFileHelper.java:138) ~[?:1.8.0_412] at java.nio.file.TempFileHelper.createTempFile(TempFileHelper.java:161) ~[?:1.8.0_412] at java.nio.file.Files.createTempFile(Files.java:852) ~[?:1.8.0_412] at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.createFile(MultiPartParserDefinition.java:312) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] at io.undertow.server.handlers.form.MultiPartParserDefinition$MultiPartUploadHandler.data(MultiPartParserDefinition.java:327) ~[undertow-core-2.2.28.Final.jar:2.2.28.Final] ... 55 more
10-25
1Error:Internal error: (java.lang.IllegalAccessError) class com.intellij.util.io.FileChannelUtil (in unnamed module @0x79ad8b2f) cannot access class sun.nio.ch.FileChannelImpl (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x79ad8b2f java.lang.IllegalAccessError: class com.intellij.util.io.FileChannelUtil (in unnamed module @0x79ad8b2f) cannot access class sun.nio.ch.FileChannelImpl (in module java.base) because module java.base does not export sun.nio.ch to unnamed module @0x79ad8b2f at com.intellij.util.io.FileChannelUtil.setupUnInterruptibleHandle(FileChannelUtil.java:26) at com.intellij.util.io.FileChannelUtil.<clinit>(FileChannelUtil.java:18) at com.intellij.util.io.ReadWriteDirectBufferWrapper$FileContext$1.execute(ReadWriteDirectBufferWrapper.java:50) at com.intellij.util.io.ReadWriteDirectBufferWrapper$FileContext$1.execute(ReadWriteDirectBufferWrapper.java:42) at com.intellij.openapi.util.io.FileUtilRt.doIOOperation(FileUtilRt.java:945) at com.intellij.util.io.ReadWriteDirectBufferWrapper$FileContext.<init>(ReadWriteDirectBufferWrapper.java:42) at com.intellij.util.io.ReadWriteDirectBufferWrapper.create(ReadWriteDirectBufferWrapper.java:27) at com.intellij.util.io.DirectBufferWrapper.getBuffer(DirectBufferWrapper.java:24) at com.intellij.util.io.ReadWriteDirectBufferWrapper.getBuffer(ReadWriteDirectBufferWrapper.java:16) at com.intellij.util.io.PagedFileStorage$StorageLock.createValue(PagedFileStorage.java:631) at com.intellij.util.io.PagedFileStorage$StorageLock.get(PagedFileStorage.java:558) at com.intellij.util.io.PagedFileStorage$StorageLock.access$500(PagedFileStorage.java:466) at com.intellij.util.io.PagedFileStorage.getBufferWrapper(PagedFileStorage.java:407) at com.intellij.util.io.PagedFileStorage.getReadOnlyBuffer(PagedFileStorage.java:375) at com.intellij.util.io.PagedFileStorage.getInt(PagedFileStorage.java:155) at com.intellij.util.io.ResizeableMappedFile.getInt(ResizeableMappedFile.java:217) at com.intellij.util.io.PersistentEnumeratorBase.<init>(PersistentEnumeratorBase.java:212) at com.intellij.util.io.PersistentBTreeEnumerator.<init>(PersistentBTreeEnumerator.java:73) at com.intellij.util.io.PersistentEnumeratorDelegate.<init>(PersistentEnumeratorDelegate.java:47) at com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:149) at com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:138) at com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:129) at com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:121) at com.intellij.util.io.PersistentHashMap.<init>(PersistentHashMap.java:114) at org.jetbrains.jps.incremental.storage.AbstractStateStorage.createMap(AbstractStateStorage.java:124) at org.jetbrains.jps.incremental.storage.AbstractStateStorage.<init>(AbstractStateStorage.java:27) at org.jetbrains.jps.incremental.storage.FileTimestampStorage.<init>(FileTimestampStorage.java:27) at org.jetbrains.jps.incremental.storage.ProjectStamps.<init>(ProjectStamps.java:39) at org.jetbrains.jps.incremental.storage.ProjectTimestamps.<init>(ProjectTimestamps.java:19) at org.jetbrains.jps.cmdline.BuildRunner.load(BuildRunner.java:92) at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:274) at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:130) at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:232) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) at java.base/java.lang.Thread.run(Thread.java:1583)
03-29
[ERROR]-[pool-2-thread-93race]-[2025-10-28 09:37:25.226]-[]-[]-[]-[]-[java.lang.RuntimeException: The analysis ended with 2 errors: [RuntimeException: error while performing request,PreviousErrorsExistException: A previous exception has occurred]]-[] java.util.concurrent.ExecutionException: java.lang.RuntimeException: The analysis ended with 2 errors: [RuntimeException: error while performing request,PreviousErrorsExistException: A previous exception has occurred] at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357) ~[?:1.8.0_342] at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1928) ~[?:1.8.0_342] at com.jd.platform.async.executor.Async.beginWork(Async.java:36) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.executor.Async.beginWork(Async.java:56) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.lc.extension.jdasync.AsyncEngine.execute(AsyncEngine.java:44) ~[jd-async-engine-1.0.7-SNAPSHOT.jar!/:?] at org.datacleaner.extension.engine.QualityEngine.executeAsync(QualityEngine.java:297) ~[DataCleaner-ext-5.8.1-2024-SNAPSHOT.jar!/:?] at com.governance.datacleaner.async.callable.TableCallable.call(TableCallable.java:56) ~[classes!/:?] at com.governance.datacleaner.async.callable.TableCallable.call(TableCallable.java:20) ~[classes!/:?] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_342] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_342] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_342] at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_342] Caused by: java.lang.RuntimeException: The analysis ended with 2 errors: [RuntimeException: error while performing request,PreviousErrorsExistException: A previous exception has occurred] at com.governance.datacleaner.async.function.TableSummaryCallbackFunction.apply(TableSummaryCallbackFunction.java:103) ~[classes!/:?] at com.governance.datacleaner.async.function.TableSummaryCallbackFunction.apply(TableSummaryCallbackFunction.java:26) ~[classes!/:?] at com.lc.extension.jdasync.callback.DefaultCallback.result(DefaultCallback.java:40) ~[jd-async-engine-1.0.7-SNAPSHOT.jar!/:?] at com.lc.extension.jdasync.callback.DefaultCallback.result(DefaultCallback.java:15) ~[jd-async-engine-1.0.7-SNAPSHOT.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.fastFail(WorkerWrapper.java:320) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.doDependsOneJob(WorkerWrapper.java:217) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:141) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.beginNext(WorkerWrapper.java:189) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:142) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.beginNext(WorkerWrapper.java:189) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:130) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:152) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.executor.Async.lambda$beginWork$0(Async.java:33) ~[asyncTool-1.3.1-20240321.jar!/:?] at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1640) ~[?:1.8.0_342] ... 3 more Caused by: org.datacleaner.job.runner.AnalysisJobFailedException: The analysis ended with 2 errors: [RuntimeException: error while performing request,PreviousErrorsExistException: A previous exception has occurred] at org.datacleaner.job.runner.AnalysisResultFutureImpl.getResultMap(AnalysisResultFutureImpl.java:131) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.extension.result.AnalysisResultExecutor.execute(AnalysisResultExecutor.java:34) ~[DataCleaner-ext-5.8.1-2024-SNAPSHOT.jar!/:?] at com.governance.datacleaner.async.function.TableWorkerSegementFunction.apply(TableWorkerSegementFunction.java:52) ~[classes!/:?] at com.governance.datacleaner.async.function.TableWorkerFunction.apply(TableWorkerFunction.java:30) ~[classes!/:?] at com.governance.datacleaner.async.function.TableWorkerFunction.apply(TableWorkerFunction.java:13) ~[classes!/:?] at com.lc.extension.jdasync.worker.DefaultWorker.action(DefaultWorker.java:36) ~[jd-async-engine-1.0.7-SNAPSHOT.jar!/:?] at com.lc.extension.jdasync.worker.DefaultWorker.action(DefaultWorker.java:15) ~[jd-async-engine-1.0.7-SNAPSHOT.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.workerDoJob(WorkerWrapper.java:341) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.fire(WorkerWrapper.java:299) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.doDependsOneJob(WorkerWrapper.java:220) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:141) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.beginNext(WorkerWrapper.java:189) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:130) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.wrapper.WorkerWrapper.work(WorkerWrapper.java:152) ~[asyncTool-1.3.1-20240321.jar!/:?] at com.jd.platform.async.executor.Async.lambda$beginWork$0(Async.java:33) ~[asyncTool-1.3.1-20240321.jar!/:?] at java.util.concurrent.CompletableFuture$AsyncRun.run(CompletableFuture.java:1640) ~[?:1.8.0_342] ... 3 more Caused by: java.lang.RuntimeException: error while performing request at org.elasticsearch.client.RestClient.extractAndWrapCause(RestClient.java:859) ~[elasticsearch-rest-client-7.9.3.jar!/:7.9.3] at org.elasticsearch.client.RestClient.performRequest(RestClient.java:259) ~[elasticsearch-rest-client-7.9.3.jar!/:7.9.3] at org.elasticsearch.client.RestClient.performRequest(RestClient.java:246) ~[elasticsearch-rest-client-7.9.3.jar!/:7.9.3] at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1613) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3] at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1583) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3] at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1553) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3] at org.elasticsearch.client.RestHighLevelClient.bulk(RestHighLevelClient.java:533) ~[elasticsearch-rest-high-level-client-7.9.3.jar!/:7.9.3] at org.datacleaner.extension.writer.CommonInsertIntoElasticSearchWriter.run(CommonInsertIntoElasticSearchWriter.java:297) ~[DataCleaner-ext-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.extension.writer.CommonInsertIntoElasticSearchWriter.run(CommonInsertIntoElasticSearchWriter.java:82) ~[DataCleaner-ext-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.util.WriteBuffer.flushBuffer(WriteBuffer.java:88) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.util.WriteBuffer.addToBuffer(WriteBuffer.java:60) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.extension.writer.CommonInsertIntoElasticSearchWriter.run(CommonInsertIntoElasticSearchWriter.java:269) ~[DataCleaner-ext-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.AnalyzerConsumer.consumeInternal(AnalyzerConsumer.java:72) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.AbstractRowProcessingConsumer.consume(AbstractRowProcessingConsumer.java:161) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:64) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.processNext(ConsumeRowHandlerDelegate.java:90) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:72) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.processNext(ConsumeRowHandlerDelegate.java:90) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.TransformerConsumer.consumeInternal(TransformerConsumer.java:113) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.AbstractRowProcessingConsumer.consume(AbstractRowProcessingConsumer.java:161) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:64) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.processNext(ConsumeRowHandlerDelegate.java:90) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:72) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.processNext(ConsumeRowHandlerDelegate.java:90) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.FilterConsumer.consumeInternal(FilterConsumer.java:80) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.AbstractRowProcessingConsumer.consume(AbstractRowProcessingConsumer.java:161) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:64) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.processNext(ConsumeRowHandlerDelegate.java:90) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.FilterConsumer.consumeInternal(FilterConsumer.java:80) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.AbstractRowProcessingConsumer.consume(AbstractRowProcessingConsumer.java:161) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:64) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.processNext(ConsumeRowHandlerDelegate.java:90) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.FilterConsumer.consumeInternal(FilterConsumer.java:80) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.AbstractRowProcessingConsumer.consume(AbstractRowProcessingConsumer.java:161) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandlerDelegate.consume(ConsumeRowHandlerDelegate.java:64) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.runner.ConsumeRowHandler.consumeRow(ConsumeRowHandler.java:145) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.tasks.ConsumeRowTask.execute(ConsumeRowTask.java:51) ~[DataCleaner-engine-core-5.8.1-2024-SNAPSHOT.jar!/:?] at org.datacleaner.job.concurrent.TaskRunnable.run(TaskRunnable.java:61) ~[DataCleaner-api-5.8.1-2024-SNAPSHOT.jar!/:?] ... 3 more Caused by: java.util.concurrent.TimeoutException: Connection lease request time out at org.apache.http.nio.pool.AbstractNIOConnPool.processPendingRequest(AbstractNIOConnPool.java:411) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.nio.pool.AbstractNIOConnPool.processNextPendingRequest(AbstractNIOConnPool.java:391) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.nio.pool.AbstractNIOConnPool.release(AbstractNIOConnPool.java:355) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager.releaseConnection(PoolingNHttpClientConnectionManager.java:391) ~[httpasyncclient-4.1.4.jar!/:4.1.4] at org.apache.http.impl.nio.client.AbstractClientExchangeHandler.releaseConnection(AbstractClientExchangeHandler.java:245) ~[httpasyncclient-4.1.4.jar!/:4.1.4] at org.apache.http.impl.nio.client.MainClientExec.responseCompleted(MainClientExec.java:387) ~[httpasyncclient-4.1.4.jar!/:4.1.4] at org.apache.http.impl.nio.client.DefaultClientExchangeHandlerImpl.responseCompleted(DefaultClientExchangeHandlerImpl.java:172) ~[httpasyncclient-4.1.4.jar!/:4.1.4] at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.processResponse(HttpAsyncRequestExecutor.java:448) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.nio.protocol.HttpAsyncRequestExecutor.inputReady(HttpAsyncRequestExecutor.java:338) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.DefaultNHttpClientConnection.consumeInput(DefaultNHttpClientConnection.java:265) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:81) ~[httpasyncclient-4.1.4.jar!/:4.1.4] at org.apache.http.impl.nio.client.InternalIODispatch.onInputReady(InternalIODispatch.java:39) ~[httpasyncclient-4.1.4.jar!/:4.1.4] at org.apache.http.impl.nio.reactor.AbstractIODispatch.inputReady(AbstractIODispatch.java:114) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.reactor.BaseIOReactor.readable(BaseIOReactor.java:162) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvent(AbstractIOReactor.java:337) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.reactor.AbstractIOReactor.processEvents(AbstractIOReactor.java:315) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.reactor.AbstractIOReactor.execute(AbstractIOReactor.java:276) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.reactor.BaseIOReactor.execute(BaseIOReactor.java:104) ~[httpcore-nio-4.4.14.jar!/:4.4.14] at org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor$Worker.run(AbstractMultiworkerIOReactor.java:591) ~[httpcore-nio-4.4.14.jar!/:4.4.14] ... 1 more
最新发布
10-29
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值