SpringBoot结合OceanBase存储股票数据

大漠孤烟直,长河落日圆。

1 前言

前文中已经介绍了 java 使用爬虫的方法获取股票的基本信息和 k 线数据,并且依据此建立了对应的选股模型,但是在分析数据之后需要将获取到的数据进行保存,方便以后进行数据分析和查询。在前文中已经讲述了 OceanBase 数据库的内容, 在本文中将使用 OceanBase 数据库和 mybatis-plus 进行数据的存储。

2 环境准备

首先需要引入 mybatis-plus 依赖,然后添加对应的配置文件。mybatis-plus 是当下很流行的 ORM 框架,基本封装了简单的增删改查方法,对于简单的应用十分适用,另外 mybatis-plus 对于 java8lambda 表达式的支持也非常的友好。

xml 复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>

这里我们需要使用的是 hikari 数据库连接池,使用的是 mysql8 的驱动,目前在 springboothikari 已经是默认的数据库连接池,具体的配置如下图所示:

mybatis-plus 的配置完成之后,我们需要创建数据库表结构,根据之前抓取的股票信息,包括股票的基本信息、模型的选择结果等,具体如下图所示:

3 数据抓取与存储

数据的抓取,我们采用定时任务的方式,通过定时任务去调用任务 SnowStockUtils.queryStockList 获取股票信息列表,因为每天都有可能会有新的股票上市,所以在保存数据时,需要判断数据是否存在,如果存在则更新数据,否则就需要更新数据。正常情况下,我们需要先进行一次查询,但是这样操作会多一次 io 操作,这里采用的是在 sql 层面来结解决这个问题,使用 mysqlon duplicate key update 的方式来实现,具体的实现代码如下图所示:

使用该方式可以减少一次数据库的查询操作,通过 mysql 数据库的特性来解决数据保存或者更新的问题。该种方式只是适用于保存的场景,对于部分更新的数据可能会存在问题,比如某些字段可能为空,但是数据库约束不为空的情况。对于这样的情况就会出现保存失败的情况。

通过任务可以先执行股票的基本信息,然后获取股票的 k 线数据,最后调用股票的数据模型进行计算,获取最终的选择结果,最后需要将数据存放在数据库中。

在上文中已经进行了数据的存储,在查询数据时,如果需要加速数据的查询和数据处理,就需要 OceanBase 的并行计算的功能,如下图所示, 添加 /*+parallel(3) */ 即可, 其中的 3 指的是并行数,和数据库的配置有关系。使用 OceanBase 使用一些特殊的语法或者配置,提高数据库的读写性能,这对一些并发业务来说帮助很大,能够大幅提高服务的性能,此外它还提供了强大的数据库迁移工具、数据统计、性能监控等内容,可以说是开发者的福音。

4 总结

在本文中,主要介绍了 mybatis-plus 的配置信息,整合了之前爬虫得到的数据,并且使用了 OceanBase 数据库进行存储,在保存数据时采用了 on duplicate key update 的方式一次执行就解决了保存和更新的问题,在保存数据库信息后,介绍了其分析和查询的方法,这里使用到了 OceanBase 的并行计算的内容。本文中所涉及的代码已经上传至 github, 欢迎大家点赞关注。项目 github 地址 springboot-auth

相关推荐
qq_12498707532 分钟前
基于springboot的尿毒症健康管理系统的设计与实现(源码+论文+部署+安装)
java·spring boot·spring·毕业设计·计算机毕业设计
编程彩机5 分钟前
互联网大厂Java面试:从Spring Boot到微服务优化场景解析
spring boot·分布式事务·微服务架构·java面试·技术解析
猿小羽27 分钟前
Flyway + Spring Boot:实现数据库迁移的最佳实践
spring boot·编程·flyway·最佳实践·数据库迁移
毕设源码-邱学长1 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
咖啡啡不加糖2 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana
gAlAxy...2 小时前
SpringBoot Servlet 容器全解析:嵌入式配置与外置容器部署
spring boot·后端·servlet
李少兄3 小时前
解决 org.springframework.context.annotation.ConflictingBeanDefinitionException 报错
java·spring boot·mybatis
BYSJMG3 小时前
计算机毕业设计选题推荐:基于Hadoop的城市交通数据可视化系统
大数据·vue.js·hadoop·分布式·后端·信息可视化·课程设计
BYSJMG3 小时前
Python毕业设计选题推荐:基于大数据的美食数据分析与可视化系统实战
大数据·vue.js·后端·python·数据分析·课程设计·美食
东东5163 小时前
OA自动化居家办公管理系统 ssm+vue
java·前端·vue.js·后端·毕业设计·毕设