如何自动连接弹簧任务执行器创建的线程?
2022-09-04 19:58:32
根据Spring的文档,使用TaskExecutor的方式如下:
import org.springframework.core.task.TaskExecutor;
public class TaskExecutorExample {
private class MessagePrinterTask implements Runnable {
private String message;
public MessagePrinterTask(String message) {
this.message = message;
}
public void run() {
System.out.println(message);
}
}
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
public void printMessages() {
for(int i = 0; i < 25; i++) {
taskExecutor.execute(new MessagePrinterTask("Message" + i));
}
}
}
但是,如果 MessagePrinterTask 具有自动连接的依赖项,则 Spring 不会配置它们,因为我们在 Spring 的上下文之外实例化了我们的 Bean(至少我是这样理解的),即使 Spring 将提供实际的线程创建。如果MessagePrinterTask具有自动连接的依赖项,我们如何让Spring识别它们?我尝试了以下修改后的示例,但无济于事(是的,自动布线已正确启用):
import org.springframework.core.task.TaskExecutor;
public class TaskExecutorExample {
@Component
private class MessagePrinterTask implements Runnable {
@Autowired
private autoWiredDependency;
public void run() {
autoWiredDependency.doNotThrowNullPointerExceptionPlease();
}
}
private TaskExecutor taskExecutor;
public TaskExecutorExample(TaskExecutor taskExecutor) {
this.taskExecutor = taskExecutor;
}
public void printMessages() {
for(int i = 0; i < 25; i++) {
taskExecutor.execute(new MessagePrinterTask());
}
}
}