項目中使用了WebSocket進行消息的推送,同時又使用了定時器Scheduled進行定時執行操作,這兩者同時使用拋出異常。
java.lang.IllegalStateException: Unexpected use of scheduler.
at org.springframework.web.socket.config.annotation.WebSocketConfigurationSupport$NoOpScheduler.schedule(WebSocketConfigurationSupport.java:108)
查看WebSocketConfigurationSupport的108行,可以看到
private static class NoOpScheduler implements TaskScheduler {
@Override
@Nullable
public ScheduledFuture<?> schedule(Runnable task, Trigger trigger) {
throw new IllegalStateException("Unexpected use of scheduler.");
}
這裏定義了一個schedule方法,方法中執行拋出了一個異常,該方法對於所有的@Schedule都會執行,所以會拋出異常。
解決:
通過顯示手動創建ThreadPoolTaskScheduler,在Config中增加方法:
@Bean
public ThreadPoolTaskScheduler taskScheduler(){
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
taskScheduler.setPoolSize(10);
taskScheduler.initialize();
return taskScheduler;
}