【问题标题】:config Spring scheduled task to start after user authentication配置Spring计划任务在用户认证后启动
【发布时间】:2017-05-13 14:11:09
【问题描述】:

我在部署项目时启动的 spring 计划方法有问题,所以我想知道是否有方法可以在用户身份验证后启动计划任务

@Scheduled(initialDelay=10000, fixedRate = 5000)
    public void sendGpsData() throws Exception {
        System.out.println("sendGpsData");
        this.template.convertAndSend("/gps-data/send", new Greeting("send me noodles"));
    }

请注意,我使用套接字每 5 秒发送一次数据。

【问题讨论】:

    标签: java spring websocket scheduled-tasks


    【解决方案1】:

    您可以在用户进行身份验证时动态安排作业。因此,在您处理用户身份验证的某个地方,您将开始调度。从sendGpsData 方法中删除@Scheduled 注释,然后在用户进行身份验证时执行:

    TaskScheduler scheduler = // injected by spring;
    ScheduledFuture scheduledFuture = scheduler.schedule(() -> sendGpsData(), new PeriodicTrigger(5000));
    
    // You can later unschedule the job if you'd like to by doing
    scheduledFuture.cancel(true);
    

    【讨论】:

    • 谢谢@Brian,它现在可以工作了,但我不再从套接字接收数据
    【解决方案2】:

    所以我想分享我的解决方案,但在此之前是关于我所面临的问题的一些细节,我有一张地图,我想每 2 秒发送一次 gps 坐标,所以我在我的控制器中使用了 spring websocket像@Brian Ecker 所说的那样注入

    @Autowired
    private TaskScheduler scheduler;
    @Autowired
    private SimpMessagingTemplate template;
    

    和显示地图的 int 方法我启动了计划任务

       @RequestMapping(value = {"/tracking"}, method = RequestMethod.GET)
        public ModelAndView trackingPage() {
            ModelAndView model = new ModelAndView();
            model.setViewName("track/tracking");
            User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
            ScheduledFuture scheduledFuture = scheduler.schedule(() -> sendGpsData(user), new PeriodicTrigger(2000));
            return model;
        }
    

    这里是向套接字发送数据的方法

     public void sendGpsData(User user) {
            System.out.println(user.getUsername());
            this.template.convertAndSendToUser(user.getUsername(), "/gps-data/send", user);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2017-05-01
      相关资源
      最近更新 更多