什么叫网站外链软件工程考研难度排行
2026/6/11 12:07:54 网站建设 项目流程
什么叫网站外链,软件工程考研难度排行,服务器网络,江门网站建设设计#x1f4da; 目录#xff08;点击跳转对应章节#xff09; 一、Spring Task定时任务实现 二、WebSocket实现实时通信 三、实际应用场景 总结 在现代Web应用开发中#xff0c;定时任务和实时通信是两个非常重要的功能。本文将深入探讨苍穹外卖项目中如何使用Spring Task实… 目录点击跳转对应章节一、Spring Task定时任务实现二、WebSocket实现实时通信三、实际应用场景总结在现代Web应用开发中定时任务和实时通信是两个非常重要的功能。本文将深入探讨苍穹外卖项目中如何使用Spring Task实现定时任务以及如何通过WebSocket实现前后端实时通信。一、Spring Task定时任务实现1.1 配置启用定时任务在Spring Boot中使用定时任务非常简单只需要在主启动类上添加EnableScheduling注解即可启用定时任务功能。SpringBootApplicationEnableScheduling//开启定时任务功能publicclassSkyApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SkyApplication.class,args);log.info(server started);}}1.2 定时任务实现在苍穹外卖项目中所有定时任务都被封装在OrderTask类中该类使用Component注解标记为Spring组件。处理超时未支付订单/** * 处理支付超时订单 */Scheduled(cron0 * * * * ?)//每分钟执行一次publicvoidprocessTimeoutOrder(){log.info(处理支付超时订单:{},newDate());LocalDateTimetimeLocalDateTime.now().plusMinutes(-15);// select * from orders where status 1 and order_time 当前时间-15分钟ListOrdersordersListorderMapper.getByStatusAndOrdertimeLT(Orders.PENDING_PAYMENT,time);if(ordersList!null!ordersList.isEmpty()){ordersList.forEach(order-{order.setStatus(Orders.CANCELLED);order.setCancelReason(MessageConstant.PAYMENT_TIMEOUT);order.setCancelTime(LocalDateTime.now());orderMapper.update(order);});}}这个任务每分钟执行一次查找超过15分钟仍未支付的订单并将其状态更新为已取消。处理派送中状态的订单/** * 处理派送中状态的订单 */Scheduled(cron0 0 1 * * ?)//每日凌晨1点执行一次publicvoidprocessDeliveryOrder(){log.info(处理派送中订单:{},newDate());// select * from orders where status 4 and order_time 当前时间-1小时LocalDateTimetimeLocalDateTime.now().plusHours(-1);ListOrdersordersListorderMapper.getByStatusAndOrdertimeLT(Orders.DELIVERY_IN_PROGRESS,time);if(ordersList!null!ordersList.isEmpty()){ordersList.forEach(order-{order.setStatus(Orders.COMPLETED);orderMapper.update(order);});}}这个任务每天凌晨1点执行一次自动完成超过1小时的派送中状态订单。1.3 数据库查询支持为了支持定时任务的查询需求在OrderMapper中定义了相应的查询方法/** * 根据状态和下单时间查询订单 * * param status * param orderTime * return */ListOrdersgetByStatusAndOrdertimeLT(Param(status)Integerstatus,Param(orderTime)LocalDateTimeorderTime);对应的SQL语句在OrderMapper.xml中定义selectidgetByStatusAndOrdertimeLTresultTypecom.sky.entity.Ordersselect * from orders where status #{status} and order_timelt;#{orderTime}/select二、WebSocket实现实时通信2.1 WebSocket配置WebSocket的配置通过WebSocketConfiguration类实现ConfigurationpublicclassWebSocketConfiguration{BeanpublicServerEndpointExporterserverEndpointExporter(){returnnewServerEndpointExporter();}}这个配置类启用了WebSocket的端点注册功能。2.2 WebSocket服务端实现WebSocket服务端的核心实现位于WebSocketServer类中ComponentServerEndpoint(/ws/{sid})publicclassWebSocketServer{//存放会话对象privatestaticMapString,SessionsessionMapnewHashMap();/** * 连接建立成功调用的方法 */OnOpenpublicvoidonOpen(Sessionsession,PathParam(sid)Stringsid){System.out.println(客户端sid建立连接);sessionMap.put(sid,session);}/** * 收到客户端消息后调用的方法 * * param message 客户端发送过来的消息 */OnMessagepublicvoidonMessage(Stringmessage,PathParam(sid)Stringsid){System.out.println(收到来自客户端sid的信息:message);}/** * 连接关闭调用的方法 * * param sid */OnClosepublicvoidonClose(PathParam(sid)Stringsid){System.out.println(连接断开:sid);sessionMap.remove(sid);}/** * 群发 * * param message */publicvoidsendToAllClient(Stringmessage){CollectionSessionsessionssessionMap.values();for(Sessionsession:sessions){try{//服务器向客户端发送消息session.getBasicRemote().sendText(message);}catch(Exceptione){e.printStackTrace();}}}}2.3 WebSocket关键特性说明端点路径通过ServerEndpoint(/ws/{sid})注解指定WebSocket的访问路径其中{sid}是客户端标识符。生命周期方法OnOpen当客户端建立连接时触发OnMessage当收到客户端消息时触发OnClose当连接关闭时触发会话管理使用HashMap存储客户端会话便于后续向特定客户端或所有客户端发送消息。消息推送提供了sendToAllClient方法可向所有连接的客户端广播消息。三、实际应用场景3.1 定时任务应用场景在苍穹外卖项目中定时任务主要用于订单状态自动处理自动取消超时未支付订单自动完成配送完成的订单数据清理定期清理过期数据状态同步定期同步第三方平台的数据状态3.2 WebSocket应用场景WebSocket在该项目中主要用于订单状态通知当订单状态发生变化时实时通知管理端页面更新实时消息推送向客户端推送重要通知或提醒聊天功能实现客服或用户间实时沟通总结苍穹外卖项目展示了Spring Task和WebSocket在实际项目中的典型应用。定时任务帮助我们自动化处理周期性任务而WebSocket实现了服务器与客户端之间的实时双向通信。这两种技术的结合使应用程序能够提供更流畅的用户体验和更高的自动化水平。在实际开发中合理运用这些技术能显著提升系统的可用性和响应速度为用户提供更好的服务体验。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询