0

0

Spring Boot 定时任务驱动 JSP 页面自动刷新与数据更新教程

碧海醫心

碧海醫心

发布时间:2026-02-14 09:53:00

|

622人浏览过

|

来源于php中文网

原创

Spring Boot 定时任务驱动 JSP 页面自动刷新与数据更新教程

本文介绍如何在 spring boot 应用中通过 cron 定时任务获取后端数据,并结合前端自动刷新机制,实现无需手动提交即可每小时自动更新多个 jsp 页面(如 group1.jsp ~ group5.jsp)的数据展示。核心方案为“后端定时拉取 + 前端轮询/定时刷新”,兼顾兼容性与实施简易性。

本文介绍如何在 spring boot 应用中通过 cron 定时任务获取后端数据,并结合前端自动刷新机制,实现无需手动提交即可每小时自动更新多个 jsp 页面(如 group1.jsp ~ group5.jsp)的数据展示。核心方案为“后端定时拉取 + 前端轮询/定时刷新”,兼顾兼容性与实施简易性。

在 Spring Boot + JSP 的传统 Web 架构中,JSP 本质是服务端模板渲染技术——它仅在请求到达时由控制器(Controller)渲染一次,无法主动“推送”数据到已打开的浏览器页面。因此,问题中期望的“Cron → Controller → 自动更新 5 个 JSP 页面”需明确区分两个关键环节:

  • 后端定时执行:使用 @Scheduled + Cron 表达式,每小时调用服务层抓取网站数据,并按业务逻辑拆分为 5 组(如 groupList1–groupList5),缓存至线程安全的共享存储中(如 ConcurrentHashMap 或 Redis),供各 JSP 页面实时读取;
  • 前端自动刷新:JSP 页面自身不支持服务端推送,但可通过轻量级前端脚本实现页面级定时重载,确保用户看到的是最新缓存数据。

一、后端:定时任务 + 数据缓存(非实时渲染)

首先,在 Spring Boot 主类或配置类上启用定时任务:

@SpringBootApplication
@EnableScheduling // 启用定时任务支持
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

定义一个服务类,负责定时抓取、分组并缓存数据(示例使用内存缓存,生产环境建议替换为 Redis):

@Service
public class DataGroupService {

    // 线程安全的共享缓存(key: group1~group5, value: List<DataItem>)
    private final Map<String, List<DataItem>> cache = new ConcurrentHashMap<>();

    @Scheduled(cron = "0 0 0 * * ?") // 每小时整点执行(可按需调整)
    public void fetchAndCacheGroups() {
        try {
            List<DataItem> allData = webClient.fetchFromExternalSite(); // 替换为你的爬取/HTTP调用逻辑
            List<List<DataItem>> grouped = splitIntoFiveGroups(allData);

            cache.put("group1", grouped.get(0));
            cache.put("group2", grouped.get(1));
            cache.put("group3", grouped.get(2));
            cache.put("group4", grouped.get(3));
            cache.put("group5", grouped.get(4));

            System.out.println("✅ Cron job completed: 5 groups cached.");
        } catch (Exception e) {
            log.error("Failed to fetch and cache data", e);
        }
    }

    public List<DataItem> getGroupData(String groupName) {
        return cache.getOrDefault(groupName, Collections.emptyList());
    }

    private List<List<DataItem>> splitIntoFiveGroups(List<DataItem> list) {
        // 实现均分逻辑(注意空列表、余数处理)
        int size = list.size();
        int perGroup = size / 5;
        List<List<DataItem>> result = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            int from = i * perGroup;
            int to = (i == 4) ? size : from + perGroup;
            result.add(list.subList(from, Math.min(to, size)));
        }
        return result;
    }
}

接着,为每个 JSP 页面提供对应的 Controller 映射(仅负责渲染,不处理业务逻辑):

Brancher AI
Brancher AI

无代码连接AI模型,快速创建AI应用程序

下载
@Controller
public class GroupPageController {

    private final DataGroupService dataGroupService;

    public GroupPageController(DataGroupService dataGroupService) {
        this.dataGroupService = dataGroupService;
    }

    @GetMapping("/group1")
    public String showGroup1(Model model) {
        model.addAttribute("dataList", dataGroupService.getGroupData("group1"));
        return "group1"; // 对应 src/main/webapp/WEB-INF/jsp/group1.jsp
    }

    @GetMapping("/group2")
    public String showGroup2(Model model) {
        model.addAttribute("dataList", dataGroupService.getGroupData("group2"));
        return "group2";
    }

    // ... 同理定义 group3/group4/group5
}

⚠️ 注意:@GetMapping 是响应用户首次访问或刷新时的请求,不是 Cron 触发的“推送”。Cron 只负责更新缓存,不直接操作视图。

二、前端:JSP 页面自动刷新(关键实现)

在每个 JSP 页面(如 group1.jsp)的

中添加如下 JavaScript,实现页面加载后每小时自动刷新一次(与后端 Cron 周期对齐):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>Group 1 Dashboard</title>
  <script type="text/javascript">
    // 每 3600000ms(1小时)刷新当前页面
    window.addEventListener('load', function () {
      setTimeout(function () {
        location.reload();
      }, 3600000);
    });
  </script>
</head>
<body>
  <h2>Group 1 Data</h2>
  <ul>
    <c:forEach var="item" items="${dataList}">
      <li>${item.name} - ${item.value}</li>
    </c:forEach>
  </ul>
</body>
</html>

✅ 优势:零依赖 WebSocket 或 SSE,完全兼容 Tomcat + JSP 传统部署;
⚠️ 注意事项:

  • 刷新会丢失当前页面状态(如滚动位置、表单输入),如需更平滑体验,可改用 AJAX 局部刷新(需额外暴露 REST 接口);
  • 若用户长时间未关闭页面,建议在 JS 中加入时间校准逻辑(例如:计算距下次整点剩余毫秒数,避免固定 3600s 导致偏移);
  • 生产环境建议将刷新间隔设为略大于 Cron 周期(如 3610000),防止因任务延迟导致页面显示旧数据。

总结

  • Spring Boot 的 @Scheduled 是可靠的后端定时调度工具,适合周期性数据准备;
  • JSP 作为服务端模板,不具备双向通信能力,所谓“自动更新”必须由前端主动触发(刷新或 AJAX);
  • 本方案采用“后端缓存 + 前端定时刷新”组合,简洁、低侵入、易维护,完美匹配 Eclipse/Tomcat/Java 11/Spring Boot 技术栈;
  • 如未来需升级为实时推送,可逐步引入 Spring WebFlux + Server-Sent Events(SSE)或 WebSocket,但对当前需求属于过度设计。

通过以上结构化实现,您即可让 group1.jsp 至 group5.jsp 在用户打开后,每小时静默刷新一次,始终展示由 Cron 任务最新生成的分组数据。

相关文章

驱动精灵
驱动精灵

驱动精灵基于驱动之家十余年的专业数据积累,驱动支持度高,已经为数亿用户解决了各种电脑驱动问题、系统故障,是目前有效的驱动软件,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

115

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

170

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

98

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

168

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

155

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

200

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

237

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

167

2024.02.23

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 9.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号