Spring Boot秒杀系统实现:灵活控制秒杀按钮状态

简介: Spring Boot秒杀系统实现:灵活控制秒杀按钮状态

Spring Boot秒杀系统实现:灵活控制秒杀按钮状态

在一个秒杀系统中,为了提供更好的用户体验,通常需要在秒杀活动未开始时将秒杀按钮置为灰色不可点击状态。本文将通过一个简单的示例演示如何在Spring Boot项目中实现这一功能,包括后端的控制和前端的交互。

1. 后端实现

首先,我们创建一个SeckillController,该控制器包含了获取秒杀状态和设置秒杀状态的接口:

@RestController
@RequestMapping("/seckill")
public class SeckillController {
    private boolean isSeckillOpen = false;  // 标识秒杀是否开启
    // 获取秒杀状态
    @GetMapping("/status")
    public ResponseEntity<Object> getSeckillStatus() {
        Map<String, Object> response = new HashMap<>();
        response.put("isSeckillOpen", isSeckillOpen);
        return new ResponseEntity<>(response, HttpStatus.OK);
    }
    // 设置秒杀状态
    @PostMapping("/status")
    public ResponseEntity<Object> setSeckillStatus(@RequestBody Map<String, Boolean> request) {
        isSeckillOpen = request.get("isSeckillOpen");
        Map<String, Object> response = new HashMap<>();
        response.put("success", true);
        return new ResponseEntity<>(response, HttpStatus.OK);
    }
}

2. 定时任务

创建一个SeckillScheduler定时任务类,用于模拟定时开启和关闭秒杀活动:

@Component
public class SeckillScheduler {
    @Autowired
    private SeckillController seckillController;
    @Scheduled(cron = "0 0 10 * * ?")  // 每天上午10点触发一次
    public void startSeckill() {
        seckillController.setSeckillStatus(true);
    }
    @Scheduled(cron = "0 0 12 * * ?")  // 每天中午12点触发一次
    public void stopSeckill() {
        seckillController.setSeckillStatus(false);
    }
}

3. 前端实现

使用Vue.js创建一个简单的页面,通过axios库与后端通信,并实时更新秒杀按钮的状态:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Seckill System</title>
</head>
<body>
    <button id="seckillButton" onclick="seckill()">Seckill</button>
    <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
        // 获取秒杀状态
        function checkSeckillStatus() {
            axios.get('/seckill/status')
                .then(response => {
                    const isSeckillOpen = response.data.isSeckillOpen;
                    // 根据秒杀状态设置秒杀按钮状态
                    if (isSeckillOpen) {
                        enableSeckillButton();  // 秒杀开启,设置按钮为可点击状态
                    } else {
                        disableSeckillButton(); // 秒杀未开始,设置按钮为灰色不可点击状态
                    }
                })
                .catch(error => {
                    console.error('Error checking seckill status', error);
                });
        }
        // 设置秒杀按钮为可点击状态
        function enableSeckillButton() {
            document.getElementById('seckillButton').removeAttribute('disabled');
        }
        // 设置秒杀按钮为灰色不可点击状态
        function disableSeckillButton() {
            document.getElementById('seckillButton').setAttribute('disabled', 'true');
        }
        // 执行秒杀操作
        function seckill() {
            // 在这里添加执行秒杀的逻辑
            console.log('Seckill button clicked');
        }
        // 页面加载时检查秒杀状态
        checkSeckillStatus();
    </script>
</body>
</html>

4. 运行项目

运行Spring Boot项目,访问前端页面,你将看到秒杀按钮在秒杀未开始时被灰色禁用,当秒杀开始时变为可点击状态。通过这个简单的示例,我们演示了如何通过前后端协同工作,在秒杀活动开始前将秒杀按钮置为灰色不可点击状态,提供更好的用户体验。这是一个基础实现,你可以根据实际需求进行扩展和优化。

相关文章
|
8月前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
379 6
|
5月前
|
Java UED Sentinel
微服务守护神:Spring Cloud Sentinel,让你的系统在流量洪峰中稳如磐石!
【8月更文挑战第29天】Spring Cloud Sentinel结合了阿里巴巴Sentinel的流控、降级、熔断和热点规则等特性,为微服务架构下的应用提供了一套完整的流量控制解决方案。它能够有效应对突发流量,保护服务稳定性,避免雪崩效应,确保系统在高并发下健康运行。通过简单的配置和注解即可实现高效流量控制,适用于高并发场景、依赖服务不稳定及资源保护等多种情况,显著提升系统健壮性和用户体验。
104 1
|
28天前
|
Java 数据库 数据安全/隐私保护
轻松掌握Spring依赖注入:打造你的登录验证系统
本文以轻松活泼的风格,带领读者走进Spring框架中的依赖注入和登录验证的世界。通过详细的步骤和代码示例,我们从DAO层的创建到Service层的实现,再到Spring配置文件的编写,最后通过测试类验证功能,一步步构建了一个简单的登录验证系统。文章不仅提供了实用的技术指导,还以口语化和生动的语言,让学习变得不再枯燥。
40 2
|
6月前
|
安全 Java 数据库
实现基于Spring Security的权限管理系统
实现基于Spring Security的权限管理系统
|
2月前
|
JavaScript NoSQL Java
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
CC-ADMIN后台简介一个基于 Spring Boot 2.1.3 、SpringBootMybatis plus、JWT、Shiro、Redis、Vue quasar 的前后端分离的后台管理系统
53 0
|
5月前
|
Java 微服务 Spring
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
文章介绍了如何利用Spring Cloud Alibaba快速构建大型电商系统的分布式微服务,包括服务限流降级等主要功能的实现,并通过注解和配置简化了Spring Cloud应用的接入和搭建过程。
SpringBoot+Vue+Spring Cloud Alibaba 实现大型电商系统【分布式微服务实现】
|
5月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
78 0
|
6月前
|
JavaScript Java 数据安全/隐私保护
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码(2)
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码
154 0
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码(2)
|
8月前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
566 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
6月前
|
JavaScript Java 关系型数据库
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码(1)
基于SpringBoot+Vue毕业生信息招聘平台系统【源码+论文+演示视频+包运行成功】_基于spring vue的校园招聘系统源码
192 0