最近在搞一个含有在线考试模块的系统。既然是考试,必不可少的一部分就是计时了。

总的来说,需要计时的系统大体上分两种: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计时器使用,时间戳比较先后)相关推荐

  1. 基于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 ...

  2. (附源码)spring boot网上求职招聘系统 毕业设计081201

    网上求职招聘系统 摘  要 随着社会的发展,社会的各行各业都在利用信息化时代的优势.计算机的优势和普及使得各种信息系统的开发成为必需. 网上求职招聘系统,主要的模块包括查看:首页.站点管理(轮播图.公 ...

  3. Spring Boot+Maven实现车牌训练、识别系统

    目录 1.项目功能 2.项目概述 3.项目环境 之前为各位朋友分享过Python+OpenCV实现车牌检测与识别,本篇博文为各位分享Spring Boot+Maven实现车牌训练.识别系统. 1.项目 ...

  4. Spring Boot+Vue项目 微博系统(2):构建前端Vue项目

    系列目录 Spring Boot+Vue项目 微博系统 目录 系列目录 前言 一.安装Vue CLi 二.构建一个前端项目 三.启动测试 四.项目结构 五.配置 前言 前端项目可以借助 Vue CLi ...

  5. spring boot 2.0采用com.mysql.cj.jdbc.Driver数据库驱动引发的系统时间不一致问题

    首先简单描述一下项目情况,老板新注册了一家公司,既然有公司了肯定得有个公司门户网站.现在已经是web 2.0时代了,网站内容不可能再像以前那样全部采用静态html页面.于是开发了一个内容管理系统,简称 ...

  6. 网络服务器费信息技术服务费,中山大学网络与信息技术中心网费在线系统

    Q1. 本系统支持哪些网络服务的在线续费? A:目前支持: 学生(含B类用户)网络费,教工(含B类用户)住宅区网络费和单位网络服务管理费. 收费标准见: 网络与信息技术中心服务性收费公示. Q2. 为 ...

  7. 计算机课作业在线管理,iwork学生作业在线系统

    内容简介: iwork学生作业在线系统,毕业论文,共63页,15707字,附任务书.开题报告.源程序.外文翻译等. 摘 要 进入21世纪这个空前发展的时代之后,迅速普及的计算机技术.数字化教学以及远程 ...

  8. 专利学习笔记6:在线系统的登录方法

    本文介绍"专利申请在线系统的登录方法". 1.在线系统的网址是http://cponline.sipo.gov.cn/,可在其右方找到"登录在线系统"界面,但是 ...

  9. Spring boot在线客服系统源码 在线坐席对话源码

    JAVA在线客服系统源码 网站在线客服源码 网页版在线聊天源码 开发环境:Java + Spring boot + mysql + 通信技术:netty框架 后台管理 首页-工作绩效(会话.邀请.拒绝 ...

最新文章

  1. 深入理解:RabbitMQ的前世今生
  2. 【WPF】用CustomControl打造WPF版的Marquee
  3. [BZOJ4811][Ynoi2017]由乃的OJ 树链剖分+线段树
  4. 搭建iis自己可以别人_自己可以做网上商城的搭建吗?
  5. 飞蚊症手术失败与Photostress Recovery
  6. python解复杂方程组_sympy计算方程组的复杂表达式怎么获得数值解?
  7. 作者:周武柏,男,美国佛罗里达国际大学计算机科学博士生,南京邮电大学计算机学院大数据项目组成员。...
  8. python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币
  9. 大数据产品开发流程规范_华为内部资料流出!揭秘华为数据湖:3大特点、6个标准、入湖流程...
  10. 堆积柱形图显示总数_送你一份堆积柱形图小点心,请收下~
  11. python机器学习库sklearn——BIRCH聚类
  12. 基于单片机的电子密码锁设计
  13. android车机升级carplay,现代增加支持DIY升级CarPlay,Android Auto的车型
  14. 手机不能连接本地服务器进行调试的解决办法(Localhost:8080)
  15. 线上服务应急攻关方法论
  16. 如何把wps随机数据固定_WPS Excel:巧用随机函数rand和randbetween生成各种数据
  17. Houdini 中DOP CHOP SHOP SOP VOP是什么?
  18. 记录《时间进度》(人生进度条)(包含自定义进度、小插件)的开发
  19. 27-什么是自旋锁?自旋的好处和后果是什么呢?
  20. 《The One!团队》第八次作业:ALPHA冲刺(四)

热门文章

  1. Js 树形结构数据 根据ID 查找符合的一项
  2. ELK集群+Kafka集群+FileBeat——命运多舛的安装采坑之路
  3. 解决WebView加载的网页被放大的问题
  4. 智能手机屏幕多大为宜?
  5. JavaScript奇淫技巧:压缩并加密图片
  6. Spinnaker第四节-对接k8s
  7. 魅族推荐平台架构解析(三)
  8. activiti学习--10 并行网关
  9. 七万字掌握热门工作流引擎框架Activiti7,附带视频讲解哦
  10. 人工智能新风口 互联网电视谁主沉浮?