我想使用TaskExecutor在Spring Boot中运行几个长时间任务。我想要多个RFID读取器持续运行并获取商品标签。然后,我需要使用这些标签来更新数据库。迄今为止,我无法使用Spring Boot多次运行任务。这是否可能?
我正在创建@Component reader类。创建时,我启动监听服务和监听器以跟踪标签。我有startMessageService和setReaderConfig方法。第一个方法我启动消息监听器服务以接收来自阅读器的带有标签信息的消息。第二个方法设置阅读器以自主阅读,因此当标签经过阅读器时,阅读器会向监听器发送消息,我会收到消息。
run方法基本上使阅读器保持运行以在消息到达时进行阅读。但是由于某种原因,代码没有按照我的意愿工作。一旦读卡器有标签通过,我应该收到一条消息,但我没有收到。
底部是我的threadpooltaskexecutor bean。
我不确定我缺少什么。
我正在创建@Component reader类。创建时,我启动监听服务和监听器以跟踪标签。我有startMessageService和setReaderConfig方法。第一个方法我启动消息监听器服务以接收来自阅读器的带有标签信息的消息。第二个方法设置阅读器以自主阅读,因此当标签经过阅读器时,阅读器会向监听器发送消息,我会收到消息。
run方法基本上使阅读器保持运行以在消息到达时进行阅读。但是由于某种原因,代码没有按照我的意愿工作。一旦读卡器有标签通过,我应该收到一条消息,但我没有收到。
底部是我的threadpooltaskexecutor bean。
我不确定我缺少什么。
@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;
}