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