一些在线系统的计时操作的实现(spring-boot计时器使用,时间戳比较先后)
最近在搞一个含有在线考试模块的系统。既然是考试,必不可少的一部分就是计时了。
总的来说,需要计时的系统大体上分两种:1.规定时间内的倒计时。2.规定时间段内的计时判断。
对于第一种倒计时,我觉得下面这篇文章写的很好,这是链接:
https://blog.csdn.net/a13432421434/article/details/71346153
对于第二种倒计时,我并没有找到合适的,首先介绍一下这个项目的实现,总的是前后端分离,前端试用的是vue,后台用的是spring-boot。
一开始的想法:就单纯前端获取Internet时间,然后把与后台返还来的结束时间对比,如果结束就结束。后来一想- -如果考生懂点JS知识,控制台几行代码就可以无限延长考试时间了。
(PS:当然了,也会有很多人说用闭包写进去就行了)但是这样是不好的,同样存在隐患。
后来的想法:前端无时无刻在调用一个接口,将当前的时间传给后台(或是间隔一段时间传),这样是存在并发隐患,因为考试的不可能就是一个学生,spring-boot通俗的讲只有一个入口,这样无论间隔多久- -一起传送的数据仍然是一起的,占用过大。
再后来的想法:前端不传数据,由后台单独计时,从开始时间计时到规定的结束时间,一旦时间结束了,那就向前端发送考试结束的信息。但是转念一想,也是不存在的。如果是这样,前端还是需要不断的执行一个函数,和上面的想法几乎没差别不过就是避免了被懂js的人修改作弊。
最后的想法:利用springboot中的schelling机制,添加计时任务,比如每10分钟,5分钟检查一次考试的数据表数据。通过当前时间和规定开始时间结束时间的比较,来更新当前数据状态下的考试状态。未考,考中,已考。
代码如下
1.现在你的项目启动项APPLICATION中加入如下的注解
@EnableScheduling //boot定时任务
这是spring-boot的计时任务的必要注解。
2.新建一个类,输入如下代码
package com.project.myBeans; import com.project.entity.Exam; import com.project.service.ExamService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RestController; import java.sql.Timestamp; import java.util.List; /** * @Author: TateBrown * @date: 2018/7/3 15:51 * @param: * @return: */ @Component @EnableAutoConfiguration @RestController public class SchedulingTask {@Autowired ExamService examService; /** * @Description:定时扫描所有考试任务修改考试state. * @param: [] * @return: void * @author: TateBrown * @Date: 2018/7/3 */ @Scheduled(fixedRate = 60000)//每隔一分钟查一次 public void CheckExam() {List<Exam> list = examService.GetAllExam(); Timestamp curtime = new Timestamp(System.currentTimeMillis()); for (Exam tmp : list) {Timestamp tmpfinishtime = tmp.getFinishtime(); Timestamp tmpstarttime = tmp.getStarttime(); if (curtime.before(tmpstarttime)) {tmp.setState(1); examService.modify(tmp); } else if ((curtime.equals(tmpstarttime) || curtime.after(tmpstarttime)) && (curtime.equals(tmpfinishtime) || curtime.before(tmpfinishtime))) {tmp.setState(2); examService.modify(tmp); } else {tmp.setState(3); examService.modify(tmp); }}} }
我这里的数据是由时间戳进行存储的,所以上述也是时间戳比较前后的方法。其中第一句是获取全部考试的信息,第二句是获取当前的系统时间并转换成时间戳模式,后面的就是根据当前时间判断是否更新数据。
优化:存在的优化空间就是对于已考过的考试,我们不需要这样扫描,我们每次之找出全部未考和考中的考试。这样的做法是必然需要的,但是这里我就不贴代码了。
总结:最后的做法就是符合了逻辑,因为这必然是有几场考试同时发生的存在的。而且完全由后台控制,较被修改的可能较小。
逻辑上讲,后台才是控制进程的地方,前后端分离的特性应该是把前端后端尽可能的分离开来。可能还有更好的方法。
一些在线系统的计时操作的实现(spring-boot计时器使用,时间戳比较先后)相关推荐
- 基于Spring Boot+MySQL的半自动标注系统(人、车、人脸的自动检测)设计与实现
目录 1. 目标 2 1.1 背景 3 1.2 用户需求 3 1.2.1 交通组需求 3 1.2.2 医疗组需求 3 1.3 可扩展性 4 2. 功能列表 4 2.1用户管理 4 2.2用户登录 5 ...
- (附源码)spring boot网上求职招聘系统 毕业设计081201
网上求职招聘系统 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势.计算机的优势和普及使得各种信息系统的开发成为必需. 网上求职招聘系统,主要的模块包括查看:首页.站点管理(轮播图.公 ...
- Spring Boot+Maven实现车牌训练、识别系统
目录 1.项目功能 2.项目概述 3.项目环境 之前为各位朋友分享过Python+OpenCV实现车牌检测与识别,本篇博文为各位分享Spring Boot+Maven实现车牌训练.识别系统. 1.项目 ...
- Spring Boot+Vue项目 微博系统(2):构建前端Vue项目
系列目录 Spring Boot+Vue项目 微博系统 目录 系列目录 前言 一.安装Vue CLi 二.构建一个前端项目 三.启动测试 四.项目结构 五.配置 前言 前端项目可以借助 Vue CLi ...
- spring boot 2.0采用com.mysql.cj.jdbc.Driver数据库驱动引发的系统时间不一致问题
首先简单描述一下项目情况,老板新注册了一家公司,既然有公司了肯定得有个公司门户网站.现在已经是web 2.0时代了,网站内容不可能再像以前那样全部采用静态html页面.于是开发了一个内容管理系统,简称 ...
- 网络服务器费信息技术服务费,中山大学网络与信息技术中心网费在线系统
Q1. 本系统支持哪些网络服务的在线续费? A:目前支持: 学生(含B类用户)网络费,教工(含B类用户)住宅区网络费和单位网络服务管理费. 收费标准见: 网络与信息技术中心服务性收费公示. Q2. 为 ...
- 计算机课作业在线管理,iwork学生作业在线系统
内容简介: iwork学生作业在线系统,毕业论文,共63页,15707字,附任务书.开题报告.源程序.外文翻译等. 摘 要 进入21世纪这个空前发展的时代之后,迅速普及的计算机技术.数字化教学以及远程 ...
- 专利学习笔记6:在线系统的登录方法
本文介绍"专利申请在线系统的登录方法". 1.在线系统的网址是http://cponline.sipo.gov.cn/,可在其右方找到"登录在线系统"界面,但是 ...
- Spring boot在线客服系统源码 在线坐席对话源码
JAVA在线客服系统源码 网站在线客服源码 网页版在线聊天源码 开发环境:Java + Spring boot + mysql + 通信技术:netty框架 后台管理 首页-工作绩效(会话.邀请.拒绝 ...
最新文章
- 深入理解:RabbitMQ的前世今生
- 【WPF】用CustomControl打造WPF版的Marquee
- [BZOJ4811][Ynoi2017]由乃的OJ 树链剖分+线段树
- 搭建iis自己可以别人_自己可以做网上商城的搭建吗?
- 飞蚊症手术失败与Photostress Recovery
- python解复杂方程组_sympy计算方程组的复杂表达式怎么获得数值解?
- 作者:周武柏,男,美国佛罗里达国际大学计算机科学博士生,南京邮电大学计算机学院大数据项目组成员。...
- python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币
- 大数据产品开发流程规范_华为内部资料流出!揭秘华为数据湖:3大特点、6个标准、入湖流程...
- 堆积柱形图显示总数_送你一份堆积柱形图小点心,请收下~
- python机器学习库sklearn——BIRCH聚类
- 基于单片机的电子密码锁设计
- android车机升级carplay,现代增加支持DIY升级CarPlay,Android Auto的车型
- 手机不能连接本地服务器进行调试的解决办法(Localhost:8080)
- 线上服务应急攻关方法论
- 如何把wps随机数据固定_WPS Excel:巧用随机函数rand和randbetween生成各种数据
- Houdini 中DOP CHOP SHOP SOP VOP是什么?
- 记录《时间进度》(人生进度条)(包含自定义进度、小插件)的开发
- 27-什么是自旋锁?自旋的好处和后果是什么呢?
- 《The One!团队》第八次作业:ALPHA冲刺(四)