SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用

2023-12-16

场景

定时任务中需要获取数据库中数据进行数据转换成需要的格式并进行后续的业务处理。

数据库中的数据更新频率不高。

可将数据库中数据在项目启动后读取一遍数据,然后再通过定时任务定时查询数据库更新数据。

实现数据库缓存的方式有多种,比如以下:

SpringBoot中通过自定义缓存注解(AOP切面拦截)实现数据库数据缓存到Redis:

SpringBoot中通过自定义缓存注解(AOP切面拦截)实现数据库数据缓存到Redis_redis切面-CSDN博客

SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存:

SpringBoot中集成阿里开源缓存访问框架JetCache实现声明式实例和方法缓存_springboot集成jetcache-CSDN博客

Java工具库Guava本地缓存Cache的使用、回收、刷新、统计等示例:

Java工具库Guava本地缓存Cache的使用、回收、刷新、统计等示例-CSDN博客

若msyql中数据量不大或不想引入redis等三方中间件。可通过如下简单方式实现。

注:

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、新建定时任务类

方法initBusRegion()则是从数据库中读取数据并进行数据转换为需要的格式。

声明一个变量lineStrings,用来定时接收更新从数据库中查询转换后的数据。

然后将变量传递给其他定时任务的方法作为后续业务处理使用。

示例代码:

@Component("getDataTask")
@EnableScheduling
@Slf4j
public class GetDataTask {
   
    private List<LineString> lineStrings;

    @PostConstruct
    @Scheduled(cron = "0 0 * * * ?")
    public void initBusRegion() {

            QueryWrapper<BusRegionCoreEntity> qw = new QueryWrapper<>();
            List<BusRegionCoreEntity> busRegions = busRegionCoreMapper.selectList(qw);
            lineStrings = busRegions.stream().map(busRegion -> {
                double startX = bigDecimal2Double(busRegion.getStartX());
                double startY = bigDecimal2Double(busRegion.getStartY());
                double endX = bigDecimal2Double(busRegion.getEndX());
                double endY = bigDecimal2Double(busRegion.getEndY());
                LineString lineString = null;
                try {
                    lineString = GeometryUtil.createLineString(startX, startY, endX, endY);
                    lineString.setUserData(busRegion.getRegionName());
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
                return lineString;
            }).collect(Collectors.toList());
       
    }


    @Scheduled(cron = "0/1 * * * * ?")
    public void getData() {
         positionCar(lineStrings);
    }

    private Double bigDecimal2Double(BigDecimal bigDecimal) {
        if (bigDecimal == null) {
            return null;
        }
        return bigDecimal
                .setScale(15, RoundingMode.HALF_UP)
                .doubleValue();
    }
}

这里的示例代码是使用mybatisplus从表中读取数据,然后将x y字段从double转换成bigDecimal,然后调用工具类方法

将其映射成List<LineString>所需要的数据格式。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用 的相关文章

随机推荐

  • Java的ThreadLocal

    ThreadLocal ThreadLocal 是 Java 中一个非常有用的类 它允许你创建线程局部变量 线程局部变量是指每个线程都有自己独立的变量副本 互不干扰 ThreadLocal 主要用于解决多线程环境下共享数据的线程安全性问题
  • 天猫交易rpa机器人轻松上架商品,助力提高电商效率!

    作为网店店主 你可能被困在电商运营各种繁琐的环节中已多时 当你每次上新都手忙脚乱 错漏百出 想节约人力成本而不知如何下手的时候 你可能需要了解一下RPA电商自动化解决方案中的商品自动上架机器人 只需一键点击 RPA机器人就能节约你80 的时
  • Android Tab吸顶 嵌套滚动通用实现方案✅

    很多应用的首页都会有一些嵌套滚动 Tab吸顶的布局 尤其是一些生鲜类应用 例如 朴朴超市 大润发优鲜 盒马等等 在 Android 里面 滚动吸顶方式通常可以通过 CoordinatorLayout AppBarLayout Collaps
  • 活动报名:首个「创造式任务」基准,Creative Agents创造式任务和具有想象力的智能体...

    报告主题 Creative Agents创造式任务和具有想象力的智能体 报告日期 12月18日 周一 11 00 12 00 主题简介 北京大学和清华大学等机构组成的团队提出了一类解决创造式任务的智能体 Creative Agents 并推
  • 给祖传系统做了点 GC调优,暂停时间降低了 90% | 京东云技术团队

    问题描述 公司某规则引擎系统 在每次发版启动会手动预热 预热完成当流量切进来之后会偶发的出现一次长达1 2秒的Young GC 流量并不大 并且LB下的每个节点都会出现该情况 在这次长暂停之后 每一次的年轻代GC暂停时间又都恢复在20 10
  • 浏览器的事件循环机制(Event loop)

    事件循环 浏览器的进程模型 何为进程 程序运行需要有它自己专属的内存空间 可以把这块内存空间简单的理解为进程 每个应用至少有一个进程 进程之间相互独立 即使要通信 也需要双方同意 何为线程 有了进程后 就可以运行程序的代码了 运行代码的 人
  • Java面试八股文合集【Java基础,JVM,多线程,数据库(MySQL/Redis)SSM,Dubbo,网络,MQ,Zookeeper,Netty,微服务,大数据,算法,项目,设计模式等】

    一 JDK 和 JRE 有什么区别 JDK Java Development Kit Java开发工具包 JRE Java Runtime Environment Java运行环境 JDK中包含JRE JDK中有一个名为jre的目录 里面包
  • vue element-ui el-tooltip组件失效问题

    引用自 https blog csdn net ygrhlh article details 121660806 vue element ui el tooltip组件失效问题 因为公司项目年代久远以及谷歌chrome 80 后的sames
  • 活动报名:WarAgent多智能体理解人类历史和预防未来国际冲突

    报告主题 WarAgent 多智能体理解人类历史和预防未来国际冲突 报告日期 12月19日 周二 11 00 12 00 主题简介 我们能否避免历史十字路口上的战争 这个问题已经被个人 学者 政策制定者和组织在人类历史中追寻了很长时间 在这
  • go-zero目录结构和说明

    code of conduct md 行为准则 CONTRIBUTING md 贡献指南 core 框架的核心组件 bloom 布隆过滤器 用于检测一个元素是否在一个集合中 breaker 熔断器 用于防止过多的请求导致系统崩溃 cmdli
  • mysql数据库备份与恢复

    mysql数据库备份与恢复 mysqldump工具备份 备份整个数据库 gt mysqldump u root h host p dbname gt backdb sql 备份数据库中的某个表 gt mysqldump u root h h
  • 用RPA实现高效批量下载图片,轻松解决繁琐操作!

    在电商行业中 高质量的商品图片是吸引客户的重要因素之一 然而 传统的下载方式需要逐个点击商品链接并手动保存图片 费时费力且容易出错 为了解决这个问题 八爪鱼抓取淘宝商品图片rpa机器人应运而生 它可以模拟人在电脑上的操作 根据用户的配置自动
  • Mysql表的数据类型

    数据类型 https www sjkjc com mysql varchar MySQL 中的数据类型包括以下几个大类 字符串类型 数字类型 日期和时间类型 二进制类型 地理位置数据类型 JSON 数据类型 MySQL 字符串数据类型 VA
  • 用RPA轻松实现亚马逊商品评论数据采集!

    在电商行业中 一个常见的问题是商家需要获取大量的商品评论数据来了解用户对产品的评价和反馈 以便进行产品改进和运营决策 然而 手动采集这些数据非常耗时耗力 尤其是在亚马逊这样的大平台上 评论数据量巨大且分散 无法通过开放接口一次性获取 针对这
  • 技术立身,进阶Android,成为行业领跑者!

    背景 工作2 3年后 许多人会进入一种迷茫的状态 感觉自己已经掌握了当前工作的所有基本技能 似乎失去了前进的动力 这种迷茫源于对当前职业阶段的认识不足 我个人也经历过这个阶段 深感Android开发似乎已经没有新挑战了 甚至有时会感到这个行
  • 客户案例|长安汽车金融:借助一体化智能可观测平台 Bonree ONE,提升智能告警收敛能力

    在当前数字化和智能化的大潮中 长安汽车金融以科技创新为引领 制定数字化转型战略 加强顶层设计和统筹规划 加大大数据 云计算及人工智能等新一代信息技术的应用 坚持 数据 技术 场景 融合 深入挖掘数据价值 全面提升数据服务能力 实现业务运营智
  • LinuxC中进程通信

    LinuxC中进程通信 信号 Signals Linux 提供了信号机制 允许一个进程向另一个进程发送信号以通知特定事件的发生 这是一种轻量级的通信机制 通常用于处理异步事件 您可以使用 kill 命令或 kill 函数来发送信号 然后使用
  • 如何用RPA实现天猫淘宝商品转Fordeal上架

    天猫淘宝商品转fordeal上架是一项常见的任务 需要手动操作来完成 然而 有了八爪鱼rpa 这个繁琐的过程可以变得轻松简单 首先 使用八爪鱼rpa 您只需要设定好规则和参数 然后启动机器人即可 机器人会自动登录您的天猫淘宝账号 并进入商品
  • 淘宝卖家订单金额核对,RPA机器人帮你搞定!

    在跨境电商行业中 淘宝卖家订单金额核对是一项重要的工作任务 传统的人工操作方式存在效率低下 易出错等问题 无法满足行业的快速发展需求 为了解决这些问题 八爪鱼rpa机器人应运而生 首先 让我们来看一下八爪鱼rpa在解决淘宝卖家订单金额核对问
  • SpringBoot中项目启动及定时任务缓存数据库常用数据至内存变量并转换后高频调用

    场景 定时任务中需要获取数据库中数据进行数据转换成需要的格式并进行后续的业务处理 数据库中的数据更新频率不高 可将数据库中数据在项目启动后读取一遍数据 然后再通过定时任务定时查询数据库更新数据 实现数据库缓存的方式有多种 比如以下 Spri