Secondo Spring's documentation il modo di usare il TaskExecutor è la seguente:Come si autoregistra un thread creato da 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));
}
}
}
Tuttavia, se MessagePrinterTask ha autowired dipendenze non saranno configurati entro la primavera perché stiamo istanziare il nostro fagiolo al di fuori del contesto di primavera (almeno questo è come la capisco) anche se Spring fornirà la vera creazione di thread. Se MessagePrinterTask dovesse avere dipendenze autowired, come possiamo ottenere che Spring li riconosca? Ho provato il seguente esempio modificato senza alcun risultato (e sì, autowiring abilitata opportunamente):
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());
}
}
}
Grazie per la risposta rapida Biju. Suggerimento a. è quello che sto facendo attualmente, ma è un po 'fastidioso dal momento che devo mantenere un costruttore più dipendenze autowire in una classe che potrebbe non usarli. Ho visto il suggerimento b. ma non sono sicuro se sia il modo più Spring per portare a termine il compito. Grazie comunque! – Jorge
Ora sto usando @Configurable in quanto batte l'opzione a. La mia applicazione non crea un'istanza di molti thread, quindi è sufficiente. – Jorge