Spring Boot笔记-利用Quartz进行定时任务,利用websocket推送到浏览器(界面为thymeleaf)
发布日期:2021-06-30 10:46:53
浏览次数:3
分类:技术文章
本文共 3793 字,大约阅读时间需要 12 分钟。
效果如下,浏览器输入URL:
等待一段时间,websocket主动推送
后端打印:
程序结构如下:
QuartzConfig.java
@Configurationpublic class QuartzConfig { @Bean public JobDetail job(){ return JobBuilder.newJob(QuartzJob.class).storeDurably().build(); } @Bean public Trigger trigger(){ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule("*/30 * * * * ?"); return TriggerBuilder.newTrigger() .forJob(job()) .withSchedule(scheduleBuilder) .build(); }}
WebSocketConfig.java
@Componentpublic class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); }}
MyController.java
@Controllerpublic class MyController { @GetMapping("/") public String test(){ return "index"; }}
QuartzJob.java
public class QuartzJob extends QuartzJobBean { @Autowired GoodsRepository goodsRepository; @Autowired WebSocket webSocket; @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { String str = ""; for(Goods goods : goodsRepository.getGoodsArrayList()){ str += goods.toString(); } webSocket.onMessage(str); }}
Goods.java
@Datapublic class Goods { Integer id; String name; Integer count;}
GoodsRepository.java
@Repositorypublic class GoodsRepository { private static ArrayListgoodsArrayList = new ArrayList<>(); static { Goods goods1 = new Goods(); goods1.setId(1); goods1.setName("石油50L"); goods1.setCount(100); goodsArrayList.add(goods1); Goods goods2 = new Goods(); goods2.setId(1); goods2.setName("石油150L"); goods2.setCount(100); goodsArrayList.add(goods2); Goods goods3 = new Goods(); goods3.setId(1); goods3.setName("石油250L"); goods3.setCount(100); goodsArrayList.add(goods3); Goods goods4 = new Goods(); goods4.setId(1); goods4.setName("石油300L"); goods4.setCount(100); goodsArrayList.add(goods4); } public ArrayList getGoodsArrayList(){ return goodsArrayList; }}
WebSocket.java
@Component@ServerEndpoint("/websocket")public class WebSocket { //与某个客户端连接对话,通过此对客户端发送消息 private Session session; //存放所有连接的客户端 private static ConcurrentLinkedQueueconcurrentLinkedQueue = new ConcurrentLinkedQueue<>(); @OnOpen public void onOpen(Session session){ //默认客户端,没有重名 this.session = session; concurrentLinkedQueue.add(this); System.out.println("【webSocket连接成功】当前连接人数为:" + concurrentLinkedQueue.size()); } @OnClose public void onClose() { Iterator iterator = concurrentLinkedQueue.iterator(); while (iterator.hasNext()){ WebSocket next = iterator.next(); if(next == this){ concurrentLinkedQueue.remove(next); } } } @OnError public void onError(Session session, Throwable throwable){ System.out.println("error:"); throwable.printStackTrace(); } @OnMessage public void onMessage(String message){ Iterator iterator = concurrentLinkedQueue.iterator(); while (iterator.hasNext()){ WebSocket next = iterator.next(); try { next.session.getBasicRemote().sendText(message); } catch (IOException e) { e.printStackTrace(); } } }}
DemoApplication.java
@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); }}
index.html
Title 推送页面
源码打包下载地址:
转载地址:https://it1995.blog.csdn.net/article/details/114866936 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年05月01日 19时42分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
tomcat热部署的三种方式
2019-04-30
oracle重做日志组相关操作
2019-04-30
oracle 数据库归档模式的打开与关闭
2019-04-30
tomcat日志不够详情,增加logging.properties进行问题排查
2019-04-30
oracle创建用户使用表空间限额,修改,查询
2019-04-30
oracle数据导入导出笔记
2019-04-30
oracle创建临时表
2019-04-30
oracle找出当前用户模式下,哪些表的哪些列的数据类型是日期型
2019-04-30
java.lang.UnsatisfiedLinkError: /db/app/oracle/product/11.2.0/lib/libnjni11.so: libclntsh.so.11.1
2019-04-30
oracle计算一个表的大小
2019-04-30
ssh 和 scp 命令访问非默认22端口。
2019-04-30
linux定时清理备份加日志记录
2019-04-30
nginx切割日志定时脚本
2019-04-30
oracle删除表,让整个表从数据库中彻底消失
2019-04-30
oracle往表插入特殊字符&
2019-04-30
oracle中的merge命令
2019-04-30
docker安装mysql
2019-04-30
jfinal排查过滤拦截相关请求
2019-04-30
java文件管道拷贝工具类
2019-04-30