Я создал пружинный threadpooltaskexecutor, который будет использоваться для непрерывного запуска задачи чтения из считывателя RFID.Я работал с потоками, но я бы хотел, чтобы Spring управлял ими.Теперь, когда у меня есть это в пуле потоков, это не работает должным образом.Объект создается, и тогда больше не дается никакой информации, даже если перед читателем передаются теги.
Я создаю считыватель в службе для подключения к считывателю и считывания тегов из службы прослушивания сообщений.Ожидается, что он будет считываться в течение 5 секунд, и если есть теги, на адрес уведомления должно быть отправлено уведомление.Затем теги распечатываются на данный момент.Со временем я добавлю код, чтобы сделать что-то другое с тегами.В это время я не включал уведомление о сообщении.
Я знаю, что что-то упустил, но не могу найти.Я знаю, что это много кода, чтобы посмотреть, но это то, что у меня есть.
Вот конфигурация threadpoolexecutor:
@Bean
public TaskExecutor threadPoolTaskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(15);
executor.setMaxPoolSize(20);
executor.setThreadNamePrefix("default_task_executor_thread");
executor.initialize();
return executor;
}
Вот весенний сервис:
@Service
public class ReadTags {
@Autowired
private TaskExecutor taskExecutor;
public void testMethod() throws UnknownHostException,
AlienReaderException, InterruptedException {
AlienReader reader=(AlienReader) applicationContext.getBean("alienReader");
reader.setIpaddress("111.111.11.11");
reader.setPort(11);
reader.setUsername("username");
reader.setPassword("password");
taskExecutor.execute(new Runnable(){
@Override
public void run(){
try {
reader.startMessageService(3700);
reader.setReaderConfig(reader,3700);
} catch (UnknownHostException | AlienReaderException |
InterruptedException e) {
e.printStackTrace();
}
}
});
}
ВотЧужой читатель класс:
@Component
@Scope("prototype")
public class AlienReader extends AlienClass1Reader implements MessageListener, TagTableListener, Runnable{
public AlienReader(String ipAddr, int port, String user, String pwd, String serviceport) throws UnknownHostException, AlienReaderException, InterruptedException{
super(ipAddr, port);
this.ipaddress=ipaddress;
this.port=port;
this.username=username;
this.password=pwd;
this.serviceport=serviceport;
}
public void startMessageService(int serviceport) throws
UnknownHostException, AlienReaderException, InterruptedException{
service=new MessageListenerService(serviceport);
service.setMessageListener(this);
try{
service.startService();
}catch(IOException e){
log.info("Error starting MessageListenerService for reader: " + ipAddr);
e.printStackTrace();
}
}
private void setReader(String username, String password) throws UnknownHostException, AlienReaderException, InterruptedException{
log.info("Setting up reader");
...............................rest of code
}
@Override
public void run() {
try{
while(keepRunning){
Thread.sleep(1000);
}
}catch(InterruptedException e){
e.printStackTrace();
}
}