Elasticsearch6.3 使用jdbc連接


Elasticsearch6.3開始執行sql,可以和使用數據庫一樣的CRUD進行操作elasticsearch,連接過程如下(安裝下載Elasticsearch略):

一:項目中添加maven依賴

<repositories>
  <repository>
    <id>elastic.co</id>
    <url>https://artifacts.elastic.co/maven</url>
  </repository>
</repositories>

<dependency>
  <groupId>org.elasticsearch.plugin</groupId>
  <artifactId>jdbc</artifactId>
  <version>6.3.1</version>
</dependency>

二:使用測試代碼連接

package com.hts;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;


public class ESJdbcTest {

    static String  driver = "org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver";
    static String elasticsearchAddress = "127.0.0.1:9200";

    public static Properties connectionProperties(){
        Properties properties = new Properties();
//        properties.put("user", "test_admin");
//        properties.put("password", "x-pack-test-password");
        return properties;
    }

    public static void main(String[] args) {

        String address = "jdbc:es://http://" + elasticsearchAddress;
        Properties connectionProperties = connectionProperties();
        try  {
            Connection connection = DriverManager.getConnection(address, connectionProperties);
            Statement statement = connection.createStatement();
            ResultSet results = statement.executeQuery(
                    "SELECT firstname, account_number FROM bank ORDER BY account_number DESC LIMIT 5");
          while(results.next()){
              System.out.println(results.getString("firstname"));
          }
        }catch (Exception e){
              e.printStackTrace();
        }

    }

}

三:發現Exception in thread "main" java.sql.SQLInvalidAuthorizationSpecException: current license is non-compliant for [jdbc] 的錯誤需要破解xpth,更新白金許可。

(一)在D:\elasticsearch-6.3.0\modules\x-pack\x-pack-core目錄下找到x-pack-core-6.3.1.jar復制一份出來

(二)新建兩個java文件分別命名為LicenseVerifier.java和XPackBuild.java,將下面代碼黏貼
①:LicenseVerifier.java

package org.elasticsearch.license;
 
import java.nio.*;
import org.elasticsearch.common.bytes.*;
import java.util.*;
import java.security.*;
import org.elasticsearch.common.xcontent.*;
import org.apache.lucene.util.*;
import org.elasticsearch.core.internal.io.*;
import java.io.*;
 
 
public class LicenseVerifier
{
    public static boolean verifyLicense(final License license, final byte[] encryptedPublicKeyData) {
       return true;
    }
    
    public static boolean verifyLicense(final License license) {
         return true;
    }
}


②:XPackBuild.java

package org.elasticsearch.xpack.core;
 
import org.elasticsearch.common.io.*;
import java.net.*;
import org.elasticsearch.common.*;
import java.nio.file.*;
import java.io.*;
import java.util.jar.*;
 
public class XPackBuild
{
    public static final XPackBuild CURRENT;
    private String shortHash;
    private String date;
    
    @SuppressForbidden(reason = "looks up path of xpack.jar directly")
    static Path getElasticsearchCodebase() {
        final URL url = XPackBuild.class.getProtectionDomain().getCodeSource().getLocation();
        try {
            return PathUtils.get(url.toURI());
        }
        catch (URISyntaxException bogus) {
            throw new RuntimeException(bogus);
        }
    }
    
    XPackBuild(final String shortHash, final String date) {
        this.shortHash = shortHash;
        this.date = date;
    }
    
    public String shortHash() {
        return this.shortHash;
    }
    
    public String date() {
        return this.date;
    }
    
    static {
        final Path path = getElasticsearchCodebase();
        String shortHash = null;
        String date = null;
        Label_0157: {
           
            shortHash = "Unknown";
            date = "Unknown";
        }
        CURRENT = new XPackBuild(shortHash, date);
    }
}

(三)使用javac 編譯這兩個java文件,需要引入import的依賴,使用-cp參數,需要依賴原本的x-pack-core-6.3.1.jar,lucene-core-7.3.1.jar,elasticsearch-6.3.0.jar,elasticsearch-core-6.3.0.jar這四個java包(windows下使用分號分隔jar路徑,linux下使用冒號分隔,后三個jar包的路徑為D:\elasticsearch-6.3.0\lib) ``` javac -cp "x-pack-core-6.3.0.jar路徑;lucene-core-7.3.1.jar路徑;elasticsearch-6.3.0.jar路徑;elasticsearch-core-6.3.0.jar路徑" LicenseVerifier.java路徑 javac -cp "x-pack-core-6.3.0.jar路徑;lucene-core-7.3.1.jar路徑;elasticsearch-6.3.0.jar路徑;elasticsearch-core-6.3.0.jar路徑" XPackBuild.java路徑
(四)將編譯生成的LicenseVerifier.class覆蓋復制出來的x-pack-core-6.3.0.jar中目錄org/elasticsearch/license下的LicenseVerifier.class,將生成的XPackBuild.class覆蓋org/elasticsearch/xpack/code目錄下的XPackBuild.class。
(五)將覆蓋成功后的x-pack-core-6.3.0.jar復制回D:\elasticsearch-6.3.0\modules\x-pack\x-pack-core目錄下覆蓋原來的。
(六)獲取 license 證書 
 ①:https://license.elastic.co/registration填些用戶名,郵箱(重要,獲取下載鏈接),Country選擇China,其他信息隨意填寫,點擊Send
![](https://images2018.cnblogs.com/blog/986140/201807/986140-20180709095709379-1289306865.png)
②打開郵箱獲取的地址,將下載后的文件改名為license.json
③修改文件中的內容,將兩個屬性改為以下

將 "type":"basic" 替換為 "type":"platinum" # 基礎班變更為鉑金版
將 "expiry_date_in_millis":1561420799999替換為 "expiry_date_in_millis":3107746200000# 1年變為50年

④使用curl替換 license(license.json指的是剛剛下載修改屬性后的證書,要開啟elasticsearch服務)

curl -XPUT 'http://127.0.0.1:9200/_xpack/license?acknowledge=true' -d @license.json

⑤可能遇到Cannot install a [PLATINUM] license unless TLS is configured or security is disabled的錯誤,解決方法在elasticsearch.yml新增:

xpack.security.enabled: false

⑥上傳后查看證書時間http://127.0.0.1:9200/_license
![](https://images2018.cnblogs.com/blog/986140/201807/986140-20180709100408657-1370449805.png)

##四:至此可以使用jdbc連接
![](https://images2018.cnblogs.com/blog/986140/201807/986140-20180709100505205-1367332619.png)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM