我正在查看与 Apache 服务器一起运行的 tomcat 7 应用程序的线程转储。我看到了名为“ajp-bio-8009-exec”和“http-bio-8080-exec”的线程。它们之间有什么区别?我知道 AJP 是 Tomcat 连接器 BIO 使用的协议。
我有两个类Uploader和UploadTask.使用Spring 4.
@Service
public class Uploader{
@Autowired
private UploadTask task;
}
@Component
public class UploadTask implements Runnable{
@Async
public void soso(){
}
public void run(){
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序启动时,我得到以下异常:
org.springframework.beans.factory.BeanCreationException:创建名为'uploader'的bean时出错:注入自动连接的依赖项失败; 嵌套异常是org.springframework.beans.factory.BeanCreationException:无法自动装配字段:private com.xx.uploading.UploadTask com.xx.uploading.Uploader.task; 嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有为依赖项找到类型为[com.xx.uploading.UploadTask]的限定bean:期望至少有一个bean可以作为此依赖项的autowire候选者.依赖注释:{@ org.springframework.beans.factory.annotation.Autowired(required = true),@ org.springframework.beans.factory.annotation.Qualifier(value = uploadTask)}
我想这可能是因为UploadTask是一个Runnable.当我删除@Async注释时,它不会抛出任何异常.有解释吗?
更新:当我看到日志时,我发现正在创建UploadTask类bean.在自动装配期间未找到它.
我有一个库 xyz,它为我提供了一个 CompletableFuture,我想在我的 Vertx (v3.5) 事件循环中处理它。目前我正在使用CompletableFuture.handle(BiFunction)(见下文),但我想使用CompletableFuture.handleAsync(BiFunction, Executor),但我无法弄清楚如何在此方法调用中向第二个参数提供 vertx 事件循环线程.
我尝试在Vertx.runOnContext() 中执行整个代码,但 handleAsync 内部的调用仍然在 Java 的 ForkJoin 池上执行,我想避免这种情况。
CompletableFuture<Void> f = xyz.someMethod();
f.handle((v, th) -> { //Want to run this in handleAsync()
if (th == null) {
future.complete(null);
} else {
future.completeExceptionally(th);
}
return null;
});
Run Code Online (Sandbox Code Playgroud)