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

相关推荐
码事漫谈2 分钟前
Vibe Coding时代:人人都是开发者
后端
2501_916766544 分钟前
【Spring框架】SpringJDBC
java·后端·spring
+VX:Fegn089516 分钟前
计算机毕业设计|基于springboot + vue图书管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
AntBlack16 分钟前
忍不住推荐 : AI 时代 ,桌面端真的可以考虑一下Go+Wails 的组合
后端·go·ai编程
码事漫谈22 分钟前
C++20协程如何撕开异步编程的牢笼
后端
DevYK1 小时前
Coze Studio 二次开发(二)支持 MCP Server 动态配置
后端·agent·coze
掘金码甲哥1 小时前
在调度的花园里面挖呀挖
后端
IMPYLH2 小时前
Lua 的 Coroutine(协程)模块
开发语言·笔记·后端·中间件·游戏引擎·lua
我命由我123452 小时前
python-dotenv - python-dotenv 快速上手
服务器·开发语言·数据库·后端·python·学习·学习方法
LucianaiB3 小时前
震惊!我的公众号被我打造成了一个超级个体
后端