Nach Spring's documentation die Art und Weise der TaskExecutor zu verwenden ist, wie folgt:Wie kann ich einen Spring TaskExecutor automatisch erstellen?
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));
}
}
}
Wenn jedoch MessagePrinterTask autowired Abhängigkeiten hat, wird sie nicht von Spring konfiguriert werden, da wir unsere Bean Kontext außerhalb des Frühlings sind Instanziieren (zumindest das ist wie ich es verstehe), obwohl Spring die eigentliche Thread-Erstellung liefert. Wenn MessagePrinterTask autowired Abhängigkeiten haben sollte, wie bekommen wir Spring sie zu erkennen? Ich habe versucht, die folgenden modifizierten Beispiel ohne Erfolg (und ja, ist autowiring aktiviert richtig):
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());
}
}
}
Danke für die schnelle Antwort Biju. Vorschlag a. ist das, was ich gerade mache, aber es ist ein bisschen nervig, da ich einen Konstruktor und Autowire-Abhängigkeiten in einer Klasse beibehalten muss, die sie nicht benutzen kann. Ich habe einen Vorschlag gesehen b. aber ich bin mir nicht sicher, ob es der beste Weg ist, diese Aufgabe zu erfüllen. Trotzdem danke! – Jorge
Ich verwende jetzt @Configurable, da es die Option a übertrifft. Meine Anwendung instanziiert nicht viele Threads, also reicht es aus. – Jorge