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