Как создать объект для запуска из пружинного threadpooltaskexecutor - PullRequest
0 голосов
/ 25 августа 2018

Я создал пружинный 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();
        }
    }
...