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

相关推荐
chxii2 分钟前
Spring Boot 响应给客户端的常见返回类型
java·spring boot·后端
韩立学长4 分钟前
【开题答辩实录分享】以《植物爱好者交流平台的设计与实现》为例进行答辩实录分享
spring boot·后端·mysql
Wzx1980126 分钟前
go基础语法练习
开发语言·后端·golang
sp4230 分钟前
漫谈 Java 轻量级的模板技术:从字符串替换到复杂模板
java·后端
2301_7951672031 分钟前
玩转Rust高级应用. ToOwned trait 提供的是一种更“泛化”的Clone 的功能,Clone一般是从&T类型变量创造一个新的T类型变量
开发语言·后端·rust
草莓熊Lotso1 小时前
C++ 方向 Web 自动化测试实战:以博客系统为例,从用例到报告全流程解析
前端·网络·c++·人工智能·后端·python·功能测试
一 乐1 小时前
旅游|内蒙古景点旅游|基于Springboot+Vue的内蒙古景点旅游管理系统设计与实现(源码+数据库+文档)
开发语言·前端·数据库·vue.js·spring boot·后端·旅游
JaguarJack1 小时前
15 个 Eloquent 高级技巧,瞬间提升你的 Laravel 应用性能
后端·php·laravel
YDS8291 小时前
苍穹外卖 —— Spring Cache和购物车功能开发
java·spring boot·后端·spring·mybatis
苍老流年1 小时前
1. SpringBoot初始化器ApplicationContextInitializer使用与源码分析
java·spring boot·后端