springboot同时整合websocket和定时任务报错

springboot同时整合websocket和定时任务报错

最近用springboot整合websocket和定时任务时,出现报错信息Unexpected use of scheduler

启动类

    @EnableWebSocket
    @EnableScheduling
    public class MpApplication {
    public static void main(String[] args) {
        SpringApplication.run(MpApplication.class, args);
    }

定时执行方法

    @Component
    public class ScheduleController {
    @Scheduled(cron = "0 0/1 * * * ?")
    public void NowTime() {
        System.out.println("time->" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }
}    

报错信息

`java.lang.IllegalStateException: Unexpected use of scheduler.
    at org.springframework.web.socket.config.annotation.WebSocketConfigurationSupport$NoOpScheduler.schedule(WebSocketConfigurationSupport.java:108) ~[spring-websocket-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    at org.springframework.scheduling.config.ScheduledTaskRegistrar.scheduleCronTask(ScheduledTaskRegistrar.java:414) ~[spring-context-5.0.8.RELEASE.jar:5.0.8.RELEASE]
    ....

报错代码

private static class NoOpScheduler implements TaskScheduler {
    public ScheduledFuture<?> schedule(Runnable task, Trigger        trigger) {
        throw new IllegalStateException("Unexpected use scheduler.");
    }
    ...
}    

原来是方法实现直接抛出的,看来这是没有找到适合Scheduler对象时创建的一个没有任何意义的类,看源码

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();
    }

在注册一个合适的Scheduler失败时,直接创建了一个NoOpScheduler对象。@Scheduled注解会调用这个没有任何意义的Scheduler,那么手动创建一个taskScheduler是不是就行了呢

    @Bean
    public ThreadPoolTaskScheduler taskScheduler(){
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        return taskScheduler;
    }

果然,启动没有报错,定时任务也可以执行

    time->2018-09-20 15:09:00
    time->2018-09-20 15:10:00
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值