estemplate 导入MySQL_数据库数据导入Elasticsearch案例分享

本文介绍如何使用bboss工具将MySQL数据库的数据高效地导入到Elasticsearch,支持多种数据库和Elasticsearch版本,包括同步和异步批量导入、定时全量和增量导入。详细展示了不同导入方式的代码示例,包括设置数据库和Elasticsearch连接参数、数据映射、字段处理等。
摘要由CSDN通过智能技术生成

The best elasticsearch highlevel java rest api-----bboss

基于bboss持久层和bboss elasticsearch客户端实现数据库数据导入es案例分享(支持各种数据库和各种es版本)

通过bboss,可以非常方便地将数据库表数据导入到es中:

支持逐条数据导入

批量数据导入

批量数据多线程并行导入

定时全量(串行/并行)数据导入

定时增量(串行/并行)数据导入

支持的数据库: mysql,maridb,postgress,oracle ,sqlserver,db2,tidb,hive等

支持的Elasticsearch版本: 1.x,2.x,5.x,6.x,+

支持海量PB级数据同步导入功能

支持设置数据bulk导入任务结果处理回调函数,对每次bulk任务的结果进行成功和失败反馈,然后针对失败的bulk任务通过error方法进行相应处理

下面详细介绍本案例。

1.案例对应的源码

2.在工程中导入jdbc es maven坐标

com.bbossgroups.plugins

bboss-elasticsearch-rest-jdbc

5.9.5

本文从mysql数据库表td_cms_document导入数据到es中,除了导入上述maven坐标,还需要额外导入mysql驱动坐标:

mysql

mysql-connector-java

5.1.40

3.配置es地址

新建application.properties文件,内容为:

elasticsearch.rest.hostNames=10.21.20.168:9200

## 集群地址用逗号分隔

#elasticsearch.rest.hostNames=10.180.211.27:9200,10.180.211.28:9200,10.180.211.29:9200

4.编写简单的导入代码

4.1同步批量导入

public void testSimpleImportBuilder(){

DB2ESImportBuilder importBuilder = DB2ESImportBuilder.newInstance();

try {

//清除测试表数据

ElasticSearchHelper.getRestClientUtil().dropIndice("dbclobdemo");

}

catch (Exception e){

}

//数据源相关配置,可选项,可以在外部启动数据源

importBuilder.setDbName("test")

.setDbDriver("com.mysql.jdbc.Driver") //数据库驱动程序,必须导入相关数据库的驱动jar包

.setDbUrl("jdbc:mysql://localhost:3306/bboss?useCursorFetch=true") //通过useCursorFetch=true启用mysql的游标fetch机制,否则会有严重的性能隐患,useCursorFetch必须和jdbcFetchSize参数配合使用,否则不会生效

.setDbUser("root")

.setDbPassword("123456")

.setValidateSQL("select 1")

.setUsePool(false);//是否使用连接池

//指定导入数据的sql语句,必填项,可以设置自己的提取逻辑

importBuilder.setSql("select * from td_cms_document");

/**

* es相关配置

*/

importBuilder

.setIndex("dbclobdemo") //必填项

.setIndexType("dbclobdemo") //必填项

.setRefreshOption(null)//可选项,null表示不实时刷新,importBuilder.setRefreshOption("refresh");表示实时刷新

.setUseJavaName(true) //可选项,将数据库字段名称转换为java驼峰规范的名称,例如:doc_id -> docId

.setBatchSize(5000) //可选项,批量导入es的记录数,默认为-1,逐条处理,> 0时批量处理

.setJdbcFetchSize(10000);//设置数据库的查询fetchsize,同时在mysql url上设置useCursorFetch=true启用mysql的游标fetch机制,否则会有严重的性能隐患,jdbcFetchSize必须和useCursorFetch参数配合使用,否则不会生效

/**

* 执行数据库表数据导入es操作

*/

DataStream dataStream = importBuilder.builder();

dataStream.execute();

}

可以直接运行上述代码,查看数据导入效果。

4.2 异步批量导入

public void testSimpleLogImportBuilderFromExternalDBConfig(){

DB2ESImportBuilder importBuilder = DB2ESImportBuilder.newInstance();

try {

//清除测试表

ElasticSearchHelper.getRestClientUtil().dropIndice("dbdemo");

}

catch (Exception e){

}

//数据源相关配置,可选项,可以在外部启动数据源

importBuilder.setDbName("test")

.setDbDriver("com.mysql.jdbc.Driver") //数据库驱动程序,必须导入相关数据库的驱动jar包

.setDbUrl("jdbc:mysql://localhost:3306/bboss?useCursorFetch=true")//通过useCursorFetch=true启用mysql的游标fetch机制,否则会有严重的性能隐患,useCursorFetch必须和jdbcFetchSize参数配合使用,否则不会生效

.setDbUser("root")

.setDbPassword("123456")

.setValidateSQL("select 1")

.setUsePool(false);//是否使用连接池

//指定导入数据的sql语句,必填项,可以设置自己的提取逻辑

importBuilder.setSql("select * from td_sm_log");

/**

* es相关配置

*/

importBuilder

.setIndex("dbdemo") //必填项

.setIndexType("dbdemo") //必填项

.setRefreshOption(null)//可选项,null表示不实时刷新,importBuilder.setRefreshOption("refresh");表示实时刷新

.setUseJavaName(true) //可选项,将数据库字段名称转换为

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值