Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring @已计划和websocket,消息未到达客户端_Spring_Spring Boot_Websocket - Fatal编程技术网

Spring @已计划和websocket,消息未到达客户端

Spring @已计划和websocket,消息未到达客户端,spring,spring-boot,websocket,Spring,Spring Boot,Websocket,使用@Scheduled任务向客户端发送websocket消息时遇到问题。我在下面添加了代码。每分钟我都会检查是否有任何作业应该自动启动,如果有,我会启动它们并发送websocket消息,以便客户端知道作业已经启动 现在,除了websocket部分之外,其他一切都可以正常工作。客户端没有收到消息,但我知道它正在工作,因为我在其他地方也使用了相同的updateLogisticClients方法,并且它在100%的时间内工作 我想这是因为@Scheduled,因为它适用于常规方法。。。有什么想法吗

使用@Scheduled任务向客户端发送websocket消息时遇到问题。我在下面添加了代码。每分钟我都会检查是否有任何作业应该自动启动,如果有,我会启动它们并发送websocket消息,以便客户端知道作业已经启动

现在,除了websocket部分之外,其他一切都可以正常工作。客户端没有收到消息,但我知道它正在工作,因为我在其他地方也使用了相同的
updateLogisticClients
方法,并且它在100%的时间内工作

我想这是因为@Scheduled,因为它适用于常规方法。。。有什么想法吗

@Transactional
@Scheduled(cron = "0 * * * * *")
public List<DayJob> startRentJobsAutomatically() {
    List<DayJob> dayJobsToStart = getRentJobsToStart();
    for (DayJob dayJob : dayJobsToStart) {
        dayJob.setActualStartTime(dayJob.getStartTime());
        dayJob.setStatus(DayJob.DayJobStatus.in_progress);
        DayJobDetailResponse response = new DayJobDetailResponse(dayJobRepository.save(dayJob));
        updateLogisticClients(response);
    }
    return dayJobsToStart;
}

@SendTo("/logistic-data/day")
public void updateLogisticClients(DayJobDetailResponse response) {
    System.out.println("SENT");
    webSocket.convertAndSend("/logistic-data/day/" + CompanyContext.getCurrentCompanyId(), response);
}
@Transactional
@已计划(cron=“0*****”)
公开列表startRentJobsAutomatically(){
List dayJobsToStart=getRentJobsToStart();
for(DayJob DayJob:dayJobsToStart){
setActualStartTime(dayJob.getStartTime());
dayJob.setStatus(dayJob.DayJobStatus.in_progress);
DayJobDetailResponse=新的DayJobDetailResponse(dayJobRepository.save(dayJob));
UpdateLogisticClient(响应);
}
返回dayJobsToStart;
}
@发送至(“/物流数据/天”)
public void updateLogisticClient(DayJobDetailResponse响应){
系统输出打印项次(“发送”);
webSocket.convertAndSend(“/logistic data/day/”+CompanyContext.getCurrentCompanyId(),response);
}

仅从计划的web套接字端点调用web套接字端点不会触发它。使用单独的计划组件,如:

@Component
public class ScheduledUpdatesOnTopic{

    @Autowired
    private SimpMessagingTemplate template;

    @Scheduled(fixedDelay=300)
    public void publishUpdates(){
      List<DayJob> dayJobsToStart = getRentJobsToStart();
      for (DayJob dayJob : dayJobsToStart) {
        dayJob.setActualStartTime(dayJob.getStartTime());
        dayJob.setStatus(DayJob.DayJobStatus.in_progress);
        DayJobDetailResponse response = new DayJobDetailResponse(dayJobRepository.save(dayJ
        template.convertAndSend("/logistic-data/day", response);
    }
}
@组件
公共类ScheduledUpdatesOnTopic{
@自动连线
私有SimpMessagingTemplate;
@计划(固定延迟=300)
public void publishUpdates(){
List dayJobsToStart=getRentJobsToStart();
for(DayJob DayJob:dayJobsToStart){
setActualStartTime(dayJob.getStartTime());
dayJob.setStatus(dayJob.DayJobStatus.in_progress);
DayJobDetailResponse=新的DayJobDetailResponse(dayJobRepository.save(dayJ
模板convertAndSend(“/logistic data/day”,响应);
}
}

结果是
CompanyContext.getCurrentCompanyId()
返回
null
,客户端根据用户监听特定的company I。我在数据库中有单独的company数据,通过companyId访问,如果它是@Scheduled任务,companyId不设置:)

结果是另一个问题,不过还是谢谢你的帮助:)