0

0

Spring Boot 定时任务自动更新多个 JSP 页面数据的完整实现方案

碧海醫心

碧海醫心

发布时间:2026-02-14 10:56:02

|

168人浏览过

|

来源于php中文网

原创

Spring Boot 定时任务自动更新多个 JSP 页面数据的完整实现方案

本文介绍如何在 spring boot 应用中通过 cron 定时任务获取后端数据,并无需用户交互、自动刷新展示在 5 个独立 jsp 页面上,核心采用服务端定时计算 + 前端轻量轮询(或页面自动刷新)的可靠组合方案。

本文介绍如何在 spring boot 应用中通过 cron 定时任务获取后端数据,并无需用户交互、自动刷新展示在 5 个独立 jsp 页面上,核心采用服务端定时计算 + 前端轻量轮询(或页面自动刷新)的可靠组合方案。

在典型的 Spring Boot + JSP 架构中(部署于 Tomcat),JSP 是服务端渲染模板,本身不具备“被动接收推送”的能力——它不支持 WebSocket 或 Server-Sent Events(SSE)的原生集成(除非额外引入复杂机制)。因此,实现「CRON 自动触发 → 后端处理 → 前端页面实时更新」的关键,在于合理分工:后端负责定时准备并持久化/缓存最新分组数据;前端负责按需拉取或周期性刷新视图

✅ 推荐架构:CRON + Controller 数据预热 + JSP 静态化 + 客户端自动刷新

1. 后端:CRON 任务预加载并缓存分组数据

使用 @Scheduled 注解定义每小时执行的任务,将抓取的数据按规则拆分为 5 组,并统一存入 ConcurrentHashMap 或 Spring Cache(如 @Cacheable),避免每次请求重复调用外部 Web API:

@Component
public class DataRefreshTask {

    private final Map<String, List<DataItem>> groupCache = new ConcurrentHashMap<>();

    @Scheduled(cron = "0 0 * * * ?") // 每小时整点执行
    public void fetchAndSplitData() {
        List<DataItem> allData = webService.fetchFromExternalSite();
        List<List<DataItem>> grouped = splitIntoFiveGroups(allData);

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

        log.info("✅ Cron job completed: 5 groups cached.");
    }

    private List<List<DataItem>> splitIntoFiveGroups(List<DataItem> list) {
        // 实现均分逻辑(注意空列表保护)
        int size = list.size();
        int perGroup = (int) Math.ceil((double) size / 5);
        return IntStream.range(0, 5)
                .mapToObj(i -> list.subList(
                        Math.min(i * perGroup, size),
                        Math.min((i + 1) * perGroup, size)
                ))
                .collect(Collectors.toList());
    }

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

2. 控制器:提供面向 JSP 的只读数据端点

每个 JSP 页面对应一个独立的 @GetMapping 映射,直接从缓存中读取对应分组数据并渲染:

MiniMax开放平台
MiniMax开放平台

MiniMax-与用户共创智能,新一代通用大模型

下载
@Controller
public class GroupPageController {

    private final DataRefreshTask dataRefreshTask;

    public GroupPageController(DataRefreshTask dataRefreshTask) {
        this.dataRefreshTask = dataRefreshTask;
    }

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

    @GetMapping("/group2")
    public String showGroup2(Model model) {
        model.addAttribute("items", dataRefreshTask.getGroup("group2"));
        return "group2";
    }

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

3. JSP 页面:启用自动刷新(简洁可靠,无需 JS 复杂逻辑)

在每个 JSP 页首添加 标签,实现整页定时刷新(例如每 3600 秒即 1 小时,与 CRON 周期对齐):

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <meta charset="UTF-8">
  <title>Group 1 Dashboard</title>
  <!-- ⚡ 每 3600 秒自动重载本页,确保显示最新缓存数据 -->
  <meta http-equiv="refresh" content="3600;url=/group1">
</head>
<body>
  <h2>Group 1 Data (Auto-refreshed hourly)</h2>
  <ul>
    <c:forEach var="item" items="${items}">
      <li>${item.name} - ${item.value}</li>
    </c:forEach>
  </ul>
</body>
</html>

优势说明:该方案完全符合 Servlet/JSP 规范,兼容 Tomcat 9+ 和 Java 11,零依赖前端框架,部署即生效;且因刷新由浏览器发起,服务端无长连接压力,稳定性和可维护性远高于尝试用 POST “推送”到 JSP(JSP 本质是响应生成器,无法主动接收 POST 数据)。

⚠️ 注意事项与进阶建议

  • 避免刷新冲突:若用户正在填写表单,整页刷新会导致数据丢失。此时应改用 AJAX 局部刷新(见下方可选优化);
  • AJAX 局部更新(可选增强):在 JSP 中引入简单 JS,定时 fetch('/api/group1') 获取 JSON 数据并更新 DOM,后端新增 @ResponseBody REST 端点;
  • 缓存一致性:CRON 执行期间,若用户恰好访问页面,可能读到旧缓存。可通过加锁或双缓冲(AtomicReference 切换)提升强一致性;
  • 监控与降级:为 CRON 方法添加 @Scheduled 的异常兜底(如记录日志、发送告警),并确保 JSP 页面有空数据友好提示。

综上,所谓“自动推送至 JSP”,本质是服务端定时就绪 + 客户端约定刷新。这一模式简洁、标准、低侵入,正是 Spring Boot + JSP 场景下最务实、最可持续的工程实践。

热门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号