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());
}
}
}