基于梧桐数据库的Spring Boot应用开发实战

一、项目背景

随着业务规模的不断扩大,数据量的增长对数据库的性能提出了更高的要求。为了满足高并发、大数据量的需求,我们决定采用梧桐数据库,并结合 Spring Boot 框架快速构建一个稳定高效的应用系统。 

本文编写关于如何在 Spring Boot 环境下连接梧桐数据的指引文档。

二、环境配置

Java版本:OpenJDK 1.8

Spring Boot版本:2.7.18

梧桐数据库版本:WuTongDB 1.x

构建工具:Maven

三、技术栈介绍

梧桐数据库

梧桐数据库是由中移动信息技术有限公司(中国移动集团大数据中心)打造的新一代云原生分布式数据库,能够同时支持公有云与私有云。该产品采用存储和计算分离的架构,具有 MPP 的所有优点,服务层、计算层、存储层均可弹性扩展,支持混合工作负载并具备高扩展性。

Spring Boot

Spring Boot 是一个简化新 Spring 应用的初始搭建以及开发过程的框架。它默认配置了许多框架的使用方式,从而能够让我们不用花费太多时间在解决各种框架集成的难题上。

四、开发步骤

4.1 测试数据准备

-- DDL,schema_name按实际填写

CREATETABLEschema_name.test_table(

table_idtext,

typetext,

end_timetext,

start_timetext)

FORMAT'MAGMAAP'TABLESPACEmagma_default01;

-- INSERT

INSERTINTOschema_name.test_table(table_id,type,end_time,start_time)

VALUES('test_id_001','A','2024-07-30 12:00:00','2024-07-30 09:00:00');

INSERTINTOschema_name.test_table(table_id,type,end_time,start_time)

VALUES('test_id_002','B','2024-07-30 13:00:00','2024-07-30 10:00:00');

INSERTINTOschema_name.test_table(table_id,type,end_time,start_time)

VALUES('test_id_003','C','2024-07-30 14:00:00','2024-07-30 11:00:00');

4.2 创建 Spring Boot 项目

通过 Spring Initializr 创建一个基本的 Spring Boot 项目,并添加必要的依赖,如 Spring Web , 持久层框架 MyBatis-Plus 和用于连接梧桐数据库的驱动。

从梧桐侧获取驱动jar包:wutong-database-6.0.0.0-SNAPSHOT.jar,并放置于 E:\db 目录下。将 jar 注册到 maven 本地库:

mvn install:install-file -Dfile=E:\db\wutong-database-6.0.0.0-SNAPSHOT.jar -DgroupId=com.wutong -DartifactId=wutong -Dversion=6.0 -Dpackaging=jar

驱动注册完成后,我们在 maven 依赖加入以下内容:

<!-- Spring Boot相关依赖 -->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

    <version>2.7.18</version>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-test</artifactId>

    <version>2.7.18</version>

<scope>test</scope>

</dependency>

<!-- bootstrap.yml支持依赖-->

<dependency>

    <groupId>org.springframework.cloud</groupId>

    <artifactId>spring-cloud-starter-bootstrap</artifactId>

</dependency>

<!-- MyBatis-Plus 相关依赖 -->

<dependency>

    <groupId>com.baomidou</groupId>

    <artifactId>mybatis-plus-boot-starter</artifactId>

    <version>3.5.3.1</version>

</dependency>

<!-- 数据源切换工具 dynamic-datasource -->

<dependency>

     <groupId>com.baomidou</groupId>

     <artifactId>dynamic-datasource-spring-boot-starter</artifactId>

     <version>3.5.2</version>

</dependency>

<!-- 梧桐数据库连接驱动 -->

<dependency>

     <groupId>com.wutong</groupId>

     <artifactId>wutong</artifactId>

     <version>6.0</version>

</dependency>

4.3 配置数据库连接

在 bootstrap.yml 文件中配置数据库连接信息,例如:

spring:

   datasource:

       dynamic:

           strict: false

           primary: wutong_ydy_magma

           datasource:

               wutong_magma:

    # ip,db_name,schema_name按实际填写

                   url: jdbc:wutongdb://ip:5432/db_name?currentSchema=schema_name

# username按实际填写

                   username: username

# password按实际填写

                   password: password

                   driver-class_name: org.wutong.Driver

4.4 设计实体类

根据业务需求设计实体类,并使用 Mybatis-plus 注解来映射表结构。

// schema_name按实际替换

@TableName(value="schema_name.test_table")

publicclassTestInfoimplementsSerializable{

privateStringtableId;

privateStringtype;

privateStringendTime;

privateStringstartTime;

@TableField(exist=false)

privatestaticfinallongserialVersionUID=1L;

publicStringgetTableId() {

returntableId;

   }

publicvoidsetTableId(StringtableId) {

this.tableId=tableId;

   }

publicStringgetType() {

returntype;

   }

publicvoidsetType(Stringtype) {

this.type=type;

   }

publicStringgetEndTime() {

returnendTime;

   }

publicvoidsetEndTime(StringendTime) {

this.endTime=endTime;

   }

publicStringgetStartTime() {

returnstartTime;

   }

publicvoidsetStartTime(StringstartTime) {

this.startTime=startTime;

   }

@Override

publicbooleanequals(Objectthat) {

if(this==that) {

returntrue;

       }

if(that==null) {

returnfalse;

       }

if(getClass()!=that.getClass()) {

returnfalse;

       }

TestInfoother=(TestInfo)that;

return(this.getTableId()==null?other.getTableId()==null:this.getTableId().equals(other.getTableId()))

&&(this.getType()==null?other.getType()==null:this.getType().equals(other.getType()))

&&(this.getEndTime()==null?other.getEndTime()==null:this.getEndTime().equals(other.getEndTime()))

&&(this.getStartTime()==null?other.getStartTime()==null:this.getStartTime().equals(other.getStartTime()));

   }

@Override

publicinthashCode() {

finalintprime=31;

intresult=1;

result=prime*result+((getTableId()==null)?0:getTableId().hashCode());

result=prime*result+((getType()==null)?0:getType().hashCode());

result=prime*result+((getEndTime()==null)?0:getEndTime().hashCode());

result=prime*result+((getStartTime()==null)?0:getStartTime().hashCode());

returnresult;

   }

@Override

publicStringtoString() {

StringBuildersb=newStringBuilder();

sb.append(getClass().getSimpleName());

sb.append(" [");

sb.append("Hash = ").append(hashCode());

sb.append(", tableId=").append(tableId);

sb.append(", type=").append(type);

sb.append(", endTime=").append(endTime);

sb.append(", startTime=").append(startTime);

sb.append(", serialVersionUID=").append(serialVersionUID);

sb.append("]");

returnsb.toString();

   }

}

4.5 实现数据访问层

使用 MyBatis Plus 提供的 BaseMapper 接口来实现数据的增删改查操作。

文件内相关路径已做脱敏处理,注意替换。

@DS("wutong_magma")

publicinterfaceTestInfoMapperextendsBaseMapper<TestInfo>{}

<?xmlversion="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<!-- 替换成文件实际路径 -->

<mappernamespace="com.**.commons.wutong.mapper.demo.TestInfoMapper">

    <!-- 替换成文件实际路径 -->

<resultMapid="BaseResultMap"type="com.**.commons.wutong.domain.demo.TestInfo">

<resultproperty="tableId"column="table_id"jdbcType="VARCHAR"/>

<resultproperty="type"column="type"jdbcType="VARCHAR"/>

<resultproperty="endTime"column="end_time"jdbcType="VARCHAR"/>

<resultproperty="startTime"column="start_time"jdbcType="VARCHAR"/>

</resultMap>

<sqlid="Base_Column_List">

       table_id,type,end_time,

       start_time

</sql>

</mapper>

4.6 编写服务层

publicinterfaceTestInfoServiceextendsIService<TestInfo>{

}

@Service

publicclassTestInfoServiceImplextendsServiceImpl<TestInfoMapper,TestInfo>

implementsTestInfoService{

}

4.7 编写控制器

创建 RESTful API,定义 HTTP 请求路径、方法等,处理前端传来的请求并返回相应的响应。

@RestController

@RequestMapping("/api/test")

@Slf4j

publicclassTestController{


@Autowired

privateTestInfoServicetestInfoService;

@PostMapping(value="/get")

publicAjaxResultgetModel(@RequestBodyTestReqreq){

QueryWrapper<TestInfo>queryWrapper=newQueryWrapper<>();

queryWrapper.lambda()

.eq(TestInfo::getTableId,req.getId())

.eq(TestInfo::getEndTime,req.getTime());

TestInfoone=testInfoService.getOne(queryWrapper,false);

if(one!=null){

TestModelResptestModelResp=newTestModelResp();

testModelResp.setId(one.getTableId());

testModelResp.setType(one.getType());

returnAjaxResult.success(testModelResp);

       }

returnAjaxResult.error();

   }

}

4.8 部署应用并测试

将应用部署后,请求接口即可获取结果。

五、总结

通过上述步骤,我们成功地构建了一个基于梧桐数据库的 Spring Boot 应用,并通过 API 实现梧桐数据库的数据实时查询。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空