@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2017 the original author or authors .
* Copyright 2002 - 2018 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -16,14 +16,11 @@
@@ -16,14 +16,11 @@
package org.springframework.web.socket.config.annotation ;
import java.util.Date ;
import java.util.concurrent.ScheduledFuture ;
import org.springframework.context.annotation.Bean ;
import org.springframework.lang.Nullable ;
import org.springframework.scheduling.TaskScheduler ;
import org.springframework.scheduling.Trigger ;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler ;
import org.springframework.util.Assert ;
import org.springframework.web.servlet.HandlerMapping ;
/ * *
@ -45,7 +42,9 @@ public class WebSocketConfigurationSupport {
@@ -45,7 +42,9 @@ public class WebSocketConfigurationSupport {
public HandlerMapping webSocketHandlerMapping ( ) {
ServletWebSocketHandlerRegistry registry = initHandlerRegistry ( ) ;
if ( registry . requiresTaskScheduler ( ) ) {
registry . setTaskScheduler ( initTaskScheduler ( ) ) ;
TaskScheduler scheduler = defaultSockJsTaskScheduler ( ) ;
Assert . notNull ( scheduler , "Expected default TaskScheduler bean" ) ;
registry . setTaskScheduler ( scheduler ) ;
}
return registry . getHandlerMapping ( ) ;
}
@ -62,15 +61,17 @@ public class WebSocketConfigurationSupport {
@@ -62,15 +61,17 @@ public class WebSocketConfigurationSupport {
}
/ * *
* The default TaskScheduler to use if none is configured via
* { @link SockJsServiceRegistration # setTaskScheduler } , i . e .
* The default TaskScheduler to use if none is registered explicitly via
* { @link SockJsServiceRegistration # setTaskScheduler } :
* < pre class = "code" >
* & # 064 ; Configuration
* & # 064 ; EnableWebSocket
* public class WebSocketConfig implements WebSocketConfigurer {
*
* public void registerWebSocketHandlers ( WebSocketHandlerRegistry registry ) {
* registry . addHandler ( myWsHandler ( ) , "/echo" ) . withSockJS ( ) . setTaskScheduler ( myScheduler ( ) ) ;
* registry . addHandler ( myHandler ( ) , "/echo" )
* . withSockJS ( )
* . setTaskScheduler ( myScheduler ( ) ) ;
* }
*
* // ...
@ -78,59 +79,16 @@ public class WebSocketConfigurationSupport {
@@ -78,59 +79,16 @@ public class WebSocketConfigurationSupport {
* < / pre >
* /
@Bean
@Nullable
public TaskScheduler defaultSockJsTaskScheduler ( ) {
return initTaskScheduler ( ) ;
}
private TaskScheduler initTaskScheduler ( ) {
if ( this . scheduler = = null ) {
ServletWebSocketHandlerRegistry registry = initHandlerRegistry ( ) ;
if ( registry . requiresTaskScheduler ( ) ) {
ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler ( ) ;
threadPoolScheduler . setThreadNamePrefix ( "SockJS-" ) ;
threadPoolScheduler . setPoolSize ( Runtime . getRuntime ( ) . availableProcessors ( ) ) ;
threadPoolScheduler . setRemoveOnCancelPolicy ( true ) ;
this . scheduler = threadPoolScheduler ;
}
else {
this . scheduler = new NoOpScheduler ( ) ;
}
if ( initHandlerRegistry ( ) . requiresTaskScheduler ( ) ) {
ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler ( ) ;
threadPoolScheduler . setThreadNamePrefix ( "SockJS-" ) ;
threadPoolScheduler . setPoolSize ( Runtime . getRuntime ( ) . availableProcessors ( ) ) ;
threadPoolScheduler . setRemoveOnCancelPolicy ( true ) ;
this . scheduler = threadPoolScheduler ;
}
return this . scheduler ;
}
private static class NoOpScheduler implements TaskScheduler {
@Override
@Nullable
public ScheduledFuture < ? > schedule ( Runnable task , Trigger trigger ) {
throw new IllegalStateException ( "Unexpected use of scheduler." ) ;
}
@Override
public ScheduledFuture < ? > schedule ( Runnable task , Date startTime ) {
throw new IllegalStateException ( "Unexpected use of scheduler." ) ;
}
@Override
public ScheduledFuture < ? > scheduleAtFixedRate ( Runnable task , Date startTime , long period ) {
throw new IllegalStateException ( "Unexpected use of scheduler." ) ;
}
@Override
public ScheduledFuture < ? > scheduleAtFixedRate ( Runnable task , long period ) {
throw new IllegalStateException ( "Unexpected use of scheduler." ) ;
}
@Override
public ScheduledFuture < ? > scheduleWithFixedDelay ( Runnable task , Date startTime , long delay ) {
throw new IllegalStateException ( "Unexpected use of scheduler." ) ;
}
@Override
public ScheduledFuture < ? > scheduleWithFixedDelay ( Runnable task , long delay ) {
throw new IllegalStateException ( "Unexpected use of scheduler." ) ;
}
}
}