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

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

时间:2023-12-14 15:12:26浏览次数:32  
标签:缓存 SpringBoot busRegion double 数据库 bigDecimal2Double 内存 定时

场景

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

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

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

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

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

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/118267333

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

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/131662049

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

https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/127960195

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

注:

博客:
https://blog.csdn.net/badao_liumang_qizhi

实现

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>所需要的数据格式。

标签:缓存,SpringBoot,busRegion,double,数据库,bigDecimal2Double,内存,定时
From: https://www.cnblogs.com/badaoliumangqizhi/p/17901213.html

相关文章

  • 浅谈一下对SpringBoot的理解
    简化Spring+SpringMVC的开发1.Maven导入依赖Starter依赖管理:SpringBoot的Starter依赖简化了项目的依赖管理。通过导入预配置的Starter依赖,开发者可以轻松地引入一组相关的库和配置,而无需手动管理每个库的版本和依赖关系。约定大于配置:使用Starter依赖遵循了Spri......
  • SpringBoot 中使用 Filter
    Filter是JavaEE中Servlet规范的一个组件,位于包javax.servlet 中,它可以在HTTP请求到达Servlet之前,被一个或多个Filter处理。它的工作流程如图:Filter的这个特性在生产环境中有很广泛的应用,如:修改请求和响应、防止xss攻击、包装二进制流使其可以多次读,等等。实际工作中,......
  • 【转载】Springboot2.x单元测试
    参考https://blog.csdn.net/wangxi06/article/details/114630426https://blog.csdn.net/qq_44381387/article/details/120869168(新版spring-boot-starter-test不再集成junit,而是junit-jupiter,无需@RunWith)https://www.jianshu.com/p/34f57f41af70https://www.cnblogs.co......
  • SpringBoot接收日期参数异常
    一、关于接收前端传递的日期参数的问题:前提:Date类型的属性上添加了以下注解:@JsonFormat(timezone="GMT+8",pattern="yyyy-MM-dd")@DateTimeFormat(pattern="yyyy-MM-dd")@JSONField(format="yyyy-MM-dd")1、java.sql.date:空字符串解析报错,正常日期格式字符串没问......
  • SpringBoot中@Transactional失效场景
    一、背景:1、需求  定时器需要定时到“消息通知表”中获取“消息反馈表”中不存在的数据,遍历这些数据,并对每一条数据发起流程,不管发起成功与否都需要往消息反馈表中插入一条该数据的发起结果,若发起成功还需要往“核查案件表”中插入一条该案件的主表数据2、问题:  发现在发......
  • pytorch训练模型内存溢出
    1、训练模型命令命令如下所示是训练命名实体识别的命令,在win10系统下执行activatepytorchcdF:\Python\github\ultralytics-main\submain\pytorch_bert_bilstm_crf_ner-mainf:pythonmain.py--bert_dir="../model_hub/chinese-bert-wwm-ext/"--data_dir="./data/cner/"--dat......
  • springboot虚拟线程(jdk21,springboot3.2.0)
    1.什么是虚拟线程虚拟线程是JDK21版本正式发布的一个新特性。虚拟线程和平台线程主要区别在于,虚拟线程在运行周期内不依赖操作系统线程:它们与硬件脱钩,因此被称为“虚拟”。这种解耦是由JVM提供的抽象层赋予的。虚拟线程的运行成本远低于平台线程。它们消耗的内存要少得多。这就......
  • 【SpringBootWeb入门-12】MySQL-DDL-图形化工具
    1、章节前言上一篇文章我们讲解了MySQL的安装与配置,以及相关sql命令的执行操作,在演示这些sql语句的时候,我们都是在命令行当中进行操作的,在命令行当中敲写语句很不方便,主要原因有以下几点:无提示:命令行当中输入任何sql语句没有任何提示,全凭记忆,而且很容易敲错代码;操作繁琐:全部的......
  • springboot004旅游路线规划系统(Java毕业设计,附数据库和源码)
    第一章绪论1.1选题背景与研究意义随着社会的不断进步,在居民生活水平提高的同时,人们当前在生活的方方面面也越来越注重服务所带来的体验,随着近几年国家政策大力发展旅游业,旅游景点的建设越来也完善,旅游业的发展速度得到了显著的提升。各大旅行社、旅游景点都不断的推出新的活动计......
  • 内存堆栈结构
    参考:秒懂栈内存和堆内存(深入底层)(xjx100.cn)堆栈与堆(StackvsHeap):有什么区别?图文并茂拆解代码解析!-知乎(zhihu.com)学习CLRviaC#(二)-类型基础-CSDN博客我们都知道值类型存在“栈”中,引用类型存在“堆”中。这篇文章深入讨论下内存的栈和堆的结构。1.前言1.指针人......