testcontainers-java新增对tidb的支持(代码片段)

TiDB_PingCAP TiDB_PingCAP     2022-12-10     374

关键词:

testcontainers-java 已于近期新增了对 TiDB 容器的支持。以后,在 Java 的应用程序中,你可以直接使用 Java 代码控制并创建 Docker 容器来使用 TiDB,并管理它的生命周期,而无需编写外部脚本,这将极大地简化开发流程。本文介绍了如何通过 testcontainers-java 创建和管理 TiDB 实例。

testcontainers-java 是一个 Java 的 JUnit 测试库,为数据库(包括 MySQL、Postgres、DB2、Clickhouse、CockroachDB 等)、Selenium 浏览器以及其它能在 Docker 容器中运行的项目提供了轻量的,随用随弃的实例。

testcontainers-java 已于近期新增了对 TiDB 容器的支持。

在其官方文档中,也出现了 TiDB 的模块说明

以后,在 Java 的应用程序中,你可以直接使用 Java 代码控制并创建 Docker 容器来使用 TiDB,并管理它的生命周期,而无需编写外部脚本,这将极大地简化开发流程。

示例代码

可以这样创建一个 TiDBContainer 用于管理容器:

@Container
TiDBContainer tidb = new TiDBContainer("pingcap/tidb");

随后,可以使用此代码启动该容器,这将在任何拥有 Docker 的机器上运行成功

tidb.start();

随后,便可直接创建 Statement 并运行 SQL:

MysqlDataSource ds = new MysqlDataSource();
ds.setURL(tidb.getJdbcUrl());
ds.setUser(tidb.getUsername());
ds.setPassword(tidb.getPassword());
ds.setUseSSL(false);
Statement statement = ds.getConnection().createStatement();
statement.execute(sql);

示例仓库

我们编写了一个示例代码的仓库 tidb-test-container-example。你可以使用这个仓库中的 AppTest.java 源码进行少量的更改后便可直接使用在你自己的项目中。

如果你希望进行这个仓库的测试,只需要使用 mvn clean test 便可运行。此项目依赖 JDK 11、Maven 3。
运行的结果如下:

------------ TiDB default version ------------
db: test
username: root
password: 
jdbc: jdbc:mysql://localhost:56464/test
5.7.25-TiDB-v6.1.1
------------ TiDB v6.2.0 version ------------
db: test
username: root
password: 
jdbc: jdbc:mysql://localhost:56470/test
5.7.25-TiDB-v6.2.0

打印了两种不同版本容器的基本信息,和其运行 SELECT VERSION() 时的不同输出。

展望

PingCAP Global Community 团队旨在提升开发者体验。除了本文提到的实现对 testcontainer-java 支持外,在过去一年已与社区成员一起,共同完成多项 TiDB 与主流 Driver / ORM 的适配兼容测试,如:Hibernate,Mybatis,MySQL JDBC,go-sql-driver/mysql,gorm 等,为开发者使用 TiDB 进行保驾护航;我们预计将在将来的一段时间内,完成 TiDB 外键特性、更多 Fancy 的示例项目、更多 Driver / ORM 的兼容测试的开发。
如果您希望加入我们,或对项目有任何意见或建议,可以通过在 TiDB Community 应用开发者交流专区发帖,或扫描下方二维码加入微信交流群等方式与我们联系。

进程和线程新增

1.  renice改变正在运行进程的优先级。2.  bg把挂起的进程放到后台执行。3.  getpid()获得进程号  getppid()获得父进程的进程号。4.  WEXITSTATUS(s)在父进程中返回子进程号。5.  一个线程最大只有8M内存。6.  每个线程... 查看详情

table新增空白行到首行

varstr=""; str+="<trbordercolor=‘#DEDEDE‘bgcolor=‘#ffffff‘>"; str+="<inputtype=‘hidden‘id=‘id‘name=‘tid‘>"; str+="<tdalign=‘center‘bordercolor=‘#DEDEDE‘><inputtype=‘checkbox 查看详情

4.新增表单相关的属性

新增表单相关的属性  1、可以对input(type=text)、select、textarea与button元素指定autofocus属性。它以指定属性的方式让元素在打开页面时自动获得焦点。  2、可以对input(type=text)和textarea元素指定placeholder属性,它会对用户的... 查看详情

dbsync新增对mongodbes的支持

数据库同步工具DBSync近日进行了升级,最新版本为V1.9,新增了对MongoDB、Elasticseach(ES)的支持,具体情况:1、支持同型库之间的同步,如:MongoDB至MongoDB,ES至ES。2、支持异型库之间的同步,能将SQL数据同步到NoSQL,也就是把row... 查看详情

html5新增的属性和废除的属性

HTML5中,在新增加和废除很多元素的同时,也增加和废除了很多属性。新增的属性1、表单相关的属性对input(type=text)、select、textarea与button指定autofocus属性。它以指定属性的方式让元素在画面打开时自动获得焦点。对input(type=t... 查看详情

实现对网页列表的新增删除修改查询功能。(代码片段)

==========网页列表显示界面stuList.jsp==============<%@pageimport="java.util.List"%><%@pageimport="com.ibeifeng.student.Student"%><%@pagecontentType="text/html;charset=UTF-8"language="java"%> 查看详情

VB - 检索自上次更改以来对 .txt 文件的新增内容

】VB-检索自上次更改以来对.txt文件的新增内容【英文标题】:VB-Retrievingnewadditionsto.txtfilesincelastchanged【发布时间】:2017-09-2711:26:11【问题描述】:所以基本上我要做的是创建一个日志监视器。我需要监视.txt日志文件的更改,当... 查看详情

谈谈对html5的了解

...屏幕尺寸。3、支持离线缓存技术,webStorage本地缓存。4、新增canvas,video,audio等新。标签元素。新增特殊内容元素:article,footer,header,nav,section等,新增表单控件:calendar,date,time,email,url,search。5、地理定位.....6、新增web 查看详情

急!!求mysql三表关联查询方法

三个表A表有字段tid,subjectB表有字段tid,attachmentC表有字段tid,message三个表的tid字段内容相同。请问怎么关联查询呢,可否提供实例,谢谢!非常感谢高手们的热心帮助.问题已经解决参考技术Aselect*fromsubjectajoinattachmentbona.tid=b.ti... 查看详情

linux操作系统系列:通过新增磁盘对lvm文件系统扩容

...现有的VG->扩展现有的LV,具体操作如下:1、给虚拟机新增磁盘,这里为虚 查看详情

按失真类型分类整理tid2008

   对于图像质量评价(IQA)数据库,TID2008算是不大不小的数据集了。TID2008是由乌克兰国家航空航天大学的N504信号接收、传输与处理系建立,包括25幅参考图像,1700幅失真图像。失真类型有17种包括:加性高斯噪声、颜色... 查看详情

html5新增及废除属性

html5中,在新增加和废除很多元素的同时,也增加和废除了很多属性。一、新增属性1、表单属性a、autofocus对input[所有类型]、select、textarea与button指定autofocus属性。它以指定属性的方式让元素在页面加载后自动获得焦点。一个页... 查看详情

vue对list的删除和新增操作(代码片段)

...s.list.forEach(item=>if(item.id==id)this.list.splice(i,1)))Vue对List的新增操作varcar=id:this.id,name:this.namethis.list.push(c 查看详情

h5新增标签

H5新增标签:article:标签定义外部的内容。aside:标签定义article以外的内容。aaudio:h5新增音频标签。没有高宽属性。canvas:h5新增画布标签。command:定义命令按钮(未测试)datalist:标签定义选项列表。datalist及其选项不会被想显示出来... 查看详情

对table的操作(赋值动态新增行删除行保存table中多行数据对象

一、成品界面:650)this.width=650;"src="http://s3.51cto.com/wyfs02/M01/8A/14/wKiom1glhBnhEdohAAE8pzGyV-U556.jpg-wh_500x0-wm_3-wmp_4-s_1193978151.jpg"title="图像1.jpg"alt="wKiom1glhBnhEdohAAE8pzGyV-U556.jpg-wh_5 查看详情

openai对dall-e新增100万访问权限,你会申请吗?

整理|禾木木出品| AI科技大本营(ID:rgznai100)今天,OpenAI正式宣布DALL-E准备向100万个用户开放测试版。但却不是免费的。第一个月,用户有50个免费积分,以后每个月有15个免费积分。一个积分可以提交一个文... 查看详情

如何从父线程中提取pthread的taskid(tid)?

】如何从父线程中提取pthread的taskid(tid)?【英文标题】:Howtoextracttaskid(tid)ofapthreadfromtheparentthread?【发布时间】:2019-06-1320:23:39【问题描述】:我正在使用std::thread来启动线程。另外,我需要/proc/[pid]/tasks/[tid]提供的工作线程... 查看详情

软件测试3

...增删改查四大块,在写用例之前要列出用例的测试点  新增模块:    对新增模块进行测试时,主要对模块上的文本块输入框进行数据测试。    删除模块:操作之后是否还能显示出来,数据库数据是否存在,执行... 查看详情