ES实现订单同步以及增删改查

ES服务器,kibana搭建好,ES一些基础介绍,以及kibana的基本操作也相对应输出到自己的博客,现在开始贴上es订单同步的代码,希望大家阅读之后指正。

我所谓做的不是严格意义的订单同步,只是写一个定时同步脚本,去处理同步数据库的订单。如果严格意义上订单,应该是数据库订阅,dts订阅。

前期准备:

1、数据源配置(隐私信息不公开)

*.jdbc.url=jdbc*****************
*.jdbc.username=*******
*.jdbc.password=********
jdbc.pool.validationQuery=SELET '1'

2、datasource实现(截取部分代码)

ES实现订单同步以及增删改查_第1张图片
3、订单同步脚本
ES实现订单同步以及增删改查_第2张图片

/**
 * 订单同步脚本
 */
@Component
public class OrderSyncJob {

    private static final Logger LOGGER = LoggerFactory.getLogger(OrderSyncJob.class);

    @Autowired
    private OrderSyncService orderSyncService;
    /**
     * 订单同步脚本
     */
    @Scheduled(cron = "0 */5 * * * *")
    public void orderSyncJob(){
        LOGGER.info("订单开始同步 >> orderSyncJob");
        orderSyncService.OrderSync();
        LOGGER.info("订单开始结束 >> orderSyncJob");
    }
}

订单同步sql:同步订单的更新时间在当前时间前五分钟内的订单

select * from lp_bank_order
            where update_time>=DATE_SUB(NOW(), INTERVAL 5 MINUTE)

代码如何实现es的订单同步:

我下面会介绍两种实现es客户端,实现同步订单。

一、SpringBoot集成Elasticsearch

1.1、maven依赖:

  
            org.springframework.boot
            spring-boot-starter-data-elasticsearch
            ${spring-boot.version}
      
      
            org.elasticsearch
            elasticsearch
            6.3.2
            
                
                    joda-time
                    joda-time
                
            
        
        
        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            6.3.2
            
                
                    elasticsearch
                    org.elasticsearch
                
                
                    httpclient
                    org.apache.httpcomponents
                
            
        
        
        
            org.elasticsearch.client
            transport
            6.3.2
        
        
        
            org.elasticsearch.client
            elasticsearch-rest-high-level-client
            6.3.2
        

1.2、配置文件

#####es 集群名称##########
spring.data.elasticsearch.cluster-name=es-cluster
#####es 集群节点ip  多个节点用逗号隔开######
spring.data.elasticsearch.cluster-nodes=*.*.*.*:9300

ES实现订单同步以及增删改查_第3张图片
对应model:
ES实现订单同步以及增删改查_第4张图片
保存,查询es订单的代码:
ES实现订单同步以及增删改查_第5张图片
二、实现es的客户端

2.1、实现es客户端TransportClient

/**
     * 初始化实现 TransportClient
     * @return
     */
    @PostConstruct
    public TransportClient getClient() throws UnknownHostException {

        if(client == null){
            //1、指定es集群  cluster.name 是固定的key值,my-application是ES集群的名称
            Settings settings = Settings.builder().put("cluster.name",cluterName).build();
            //2.创建访问ES服务器的客户端
            client = new PreBuiltTransportClient(settings)
                    //获取es主机中节点的ip地址及端口号(以下是单个节点案例)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName(host), port));
            LOGGER.info("es client created ");
            return client;
        }
        return client;
    }

2.2、创建es索引:

 /**
     * 创建索引
     * @param indexName
     * @param typeName
     * @param id
     * @param sourceMap
     * @return
     */
    public IndexResponse createIndex(String indexName, String typeName, String id,Map<String,Object> sourceMap){
        IndexResponse response = client.prepareIndex(indexName, typeName)
                //必须为对象单独指定ID
                .setId(id)
                .setSource(sourceMap)
                .execute()
                .actionGet();
        return response;
    }

根据index,type,id 查询document:

/**
     * 根据index,type,id 查询document
     * @param indexName
     * @param typeName
     * @param id
     * @return
     */
    public String getEsDocument(String indexName, String typeName, String id){
        GetResponse response = client.prepareGet(indexName,typeName,id).execute().actionGet();
        if(null != response){
            return response.getSourceAsString();
        }
        return null;
    }

创建document内容:

/**
     * 创建document内容
     * @param indexName
     * @param typeName
     * @param id
     * @param doContentBuilder
     * @return
     * @throws IOException
     */
    public int createDocument(String indexName, String typeName, String id,XContentBuilder doContentBuilder) throws IOException {
        //将数据转换成文档的格式(后期可以使用java对象,将数据转换成json对象就可以了)
        IndexResponse response = client.prepareIndex(indexName,typeName,id)
                .setSource(doContentBuilder).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
        return response.status().getStatus();
    }

更新es文档内容:

 /**
     * 更新es文档内容
     * @param indexName
     * @param typeName
     * @param id
     * @return
     * @throws InterruptedException
     * @throws IOException
     * @throws ExecutionException
     */
    public int updateDocument(String indexName, String typeName, String id,XContentBuilder doContentBuilder) throws InterruptedException,IOException, ExecutionException {
        UpdateRequest request = new UpdateRequest();
        request.index(indexName) //索引名
                .type(typeName) //类型
                .id(id)//id
                .doc(
                        /*XContentFactory.jsonBuilder()
                                .startObject()
                                .field("title", "单例设计模式")//要修改的字段 及字段值
                                .endObject()*/
                        doContentBuilder
                );
        UpdateResponse response= client.update(request).get();
        return response.status().getStatus();
    }

你可能感兴趣的:(elasticsearch,ES增删改查)