Я хотел бы запустить несколько длинных задач с Spring Boot, используя TaskExecutor. Я хочу, чтобы несколько RFID-ридеров работали и постоянно получали теги элементов. Затем мне нужно использовать эти теги для обновления базы данных. До сих пор мне не удавалось запускать задачи более одного раза с помощью Spring Boot. Возможно ли это?
Я создаю класс читателя @Component. При создании я запускаю службу слушателя, а слушатель отслеживает теги. У меня есть методы startMessageService и setReaderConfig. Первый метод - запуск службы прослушивания сообщений для получения сообщений с информацией тега от читателя, когда он входит. Второй метод настраивает считыватель на автономное чтение, поэтому, когда теги отправляются читателем, читатель отправляет сообщение слушатель и я получаем сообщение.
Метод run в основном заставляет читателя читать при поступлении сообщений. Но по какой-то причине код работает не так, как я хочу. Как только читатель получит тег, я должен получить сообщение, а я нет.
Внизу мой бин threadpooltaskexecutor.
Я не уверен, что мне не хватает.
@Component
@Scope("prototype")
public class AlienReader extends AlienClass1Reader implements
TagTableListener, MessageListener, Runnable{
private String ipaddress;
private int port;
private String username;
private String password;
int serviceport;
public AlienReader(String ipaddress, int port, String username, String pwd,
int serviceport) throws UnknownHostException, AlienReaderException,
InterruptedException{
super(ipaddress, port);
this.ipaddress=ipaddress;
this.port=port;
this.username=username;
this.password=pwd;
this.serviceport=serviceport;
startMessageService();
setReaderConfig();
}
}
@Bean
public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(15);
executor.setMaxPoolSize(42);
executor.setQueueCapacity(11);
executor.setThreadNamePrefix("threadPoolExecutor-");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();
return executor;
}