You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vaadin 23如何实现Grid每隔几分钟自动更新?

Vaadin Grid 数据库自动更新实现方案

核心思路

Vaadin中实现Grid自动从数据库更新,关键是利用Push机制主动向客户端推送UI更新,同时用线程安全的定时任务替代TimerTask(TimerTask在Vaadin UI线程模型下容易引发线程安全问题)。

步骤实现

  • 启用Push功能
    在你的UI类上添加@Push注解,若使用Spring Boot,还需在application.properties中配置:

    vaadin.push.mode=automatic
    

    非Spring Boot项目则在web.xml中配置Vaadin servlet的初始化参数:

    <init-param>
        <param-name>pushMode</param-name>
        <param-value>automatic</param-value>
    </init-param>
    
  • 使用ScheduledExecutorService执行定时任务
    替代TimerTask,用ScheduledExecutorService来定时查询数据库并更新Grid,确保UI操作在UI.access()方法中执行(保证线程安全)。

  • 示例代码

    @Push
    @Route("grid-auto-update")
    public class AutoUpdateGridUI extends VerticalLayout {
        private Grid<YourEntity> grid;
        private ScheduledExecutorService scheduler;
    
        public AutoUpdateGridUI() {
            // 初始化Grid和数据源
            grid = new Grid<>(YourEntity.class);
            updateGridData();
            add(grid);
    
            // 启动定时任务,每5秒刷新一次
            scheduler = Executors.newSingleThreadScheduledExecutor();
            scheduler.scheduleAtFixedRate(this::updateGridData, 0, 5, TimeUnit.SECONDS);
        }
    
        private void updateGridData() {
            // 在UI.access中执行UI更新操作
            UI.getCurrent().access(() -> {
                // 从数据库查询最新数据
                List<YourEntity> latestData = yourRepository.findAll();
                // 更新Grid数据源
                grid.setItems(latestData);
                // 或者刷新数据提供者:grid.getDataProvider().refreshAll();
            });
        }
    
        @Override
        protected void onDetach(DetachEvent detachEvent) {
            // 关闭定时任务,避免内存泄漏
            scheduler.shutdown();
            super.onDetach(detachEvent);
        }
    }
    

关键注意事项

  • 所有UI更新操作必须包裹在UI.access()中,因为Vaadin的UI对象不是线程安全的,只能在UI线程中修改。
  • 定时任务在UI销毁时(onDetach方法)必须关闭,防止线程泄漏。
  • 若数据库数据量较大,建议使用分页或增量更新(只刷新变化的数据),避免频繁全量查询影响性能。

内容的提问来源于stack exchange,提问作者Matheus Duque

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:15:32