1
1
/*
2
- * Copyright 2002-2017 the original author or authors.
2
+ * Copyright 2002-2018 the original author or authors.
3
3
*
4
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
5
* you may not use this file except in compliance with the License.
16
16
17
17
package org .springframework .web .socket .config .annotation ;
18
18
19
- import java .util .Date ;
20
- import java .util .concurrent .ScheduledFuture ;
21
-
22
19
import org .springframework .context .annotation .Bean ;
23
20
import org .springframework .lang .Nullable ;
24
21
import org .springframework .scheduling .TaskScheduler ;
25
- import org .springframework .scheduling .Trigger ;
26
22
import org .springframework .scheduling .concurrent .ThreadPoolTaskScheduler ;
23
+ import org .springframework .util .Assert ;
27
24
import org .springframework .web .servlet .HandlerMapping ;
28
25
29
26
/**
@@ -45,7 +42,9 @@ public class WebSocketConfigurationSupport {
45
42
public HandlerMapping webSocketHandlerMapping () {
46
43
ServletWebSocketHandlerRegistry registry = initHandlerRegistry ();
47
44
if (registry .requiresTaskScheduler ()) {
48
- registry .setTaskScheduler (initTaskScheduler ());
45
+ TaskScheduler scheduler = defaultSockJsTaskScheduler ();
46
+ Assert .notNull (scheduler , "Expected default TaskScheduler bean" );
47
+ registry .setTaskScheduler (scheduler );
49
48
}
50
49
return registry .getHandlerMapping ();
51
50
}
@@ -62,75 +61,34 @@ protected void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
62
61
}
63
62
64
63
/**
65
- * The default TaskScheduler to use if none is configured via
66
- * {@link SockJsServiceRegistration#setTaskScheduler}, i.e.
64
+ * The default TaskScheduler to use if none is registered explicitly via
65
+ * {@link SockJsServiceRegistration#setTaskScheduler}:
67
66
* <pre class="code">
68
67
* @Configuration
69
68
* @EnableWebSocket
70
69
* public class WebSocketConfig implements WebSocketConfigurer {
71
70
*
72
71
* public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
73
- * registry.addHandler(myWsHandler(), "/echo").withSockJS().setTaskScheduler(myScheduler());
72
+ * registry.addHandler(myHandler(), "/echo")
73
+ * .withSockJS()
74
+ * .setTaskScheduler(myScheduler());
74
75
* }
75
76
*
76
77
* // ...
77
78
* }
78
79
* </pre>
79
80
*/
80
81
@ Bean
82
+ @ Nullable
81
83
public TaskScheduler defaultSockJsTaskScheduler () {
82
- return initTaskScheduler ();
83
- }
84
-
85
- private TaskScheduler initTaskScheduler () {
86
- if (this .scheduler == null ) {
87
- ServletWebSocketHandlerRegistry registry = initHandlerRegistry ();
88
- if (registry .requiresTaskScheduler ()) {
89
- ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler ();
90
- threadPoolScheduler .setThreadNamePrefix ("SockJS-" );
91
- threadPoolScheduler .setPoolSize (Runtime .getRuntime ().availableProcessors ());
92
- threadPoolScheduler .setRemoveOnCancelPolicy (true );
93
- this .scheduler = threadPoolScheduler ;
94
- }
95
- else {
96
- this .scheduler = new NoOpScheduler ();
97
- }
84
+ if (initHandlerRegistry ().requiresTaskScheduler ()) {
85
+ ThreadPoolTaskScheduler threadPoolScheduler = new ThreadPoolTaskScheduler ();
86
+ threadPoolScheduler .setThreadNamePrefix ("SockJS-" );
87
+ threadPoolScheduler .setPoolSize (Runtime .getRuntime ().availableProcessors ());
88
+ threadPoolScheduler .setRemoveOnCancelPolicy (true );
89
+ this .scheduler = threadPoolScheduler ;
98
90
}
99
91
return this .scheduler ;
100
92
}
101
93
102
-
103
- private static class NoOpScheduler implements TaskScheduler {
104
-
105
- @ Override
106
- @ Nullable
107
- public ScheduledFuture <?> schedule (Runnable task , Trigger trigger ) {
108
- throw new IllegalStateException ("Unexpected use of scheduler." );
109
- }
110
-
111
- @ Override
112
- public ScheduledFuture <?> schedule (Runnable task , Date startTime ) {
113
- throw new IllegalStateException ("Unexpected use of scheduler." );
114
- }
115
-
116
- @ Override
117
- public ScheduledFuture <?> scheduleAtFixedRate (Runnable task , Date startTime , long period ) {
118
- throw new IllegalStateException ("Unexpected use of scheduler." );
119
- }
120
-
121
- @ Override
122
- public ScheduledFuture <?> scheduleAtFixedRate (Runnable task , long period ) {
123
- throw new IllegalStateException ("Unexpected use of scheduler." );
124
- }
125
-
126
- @ Override
127
- public ScheduledFuture <?> scheduleWithFixedDelay (Runnable task , Date startTime , long delay ) {
128
- throw new IllegalStateException ("Unexpected use of scheduler." );
129
- }
130
-
131
- @ Override
132
- public ScheduledFuture <?> scheduleWithFixedDelay (Runnable task , long delay ) {
133
- throw new IllegalStateException ("Unexpected use of scheduler." );
134
- }
135
- }
136
94
}
0 commit comments