Elasticsearch7使用jdbc连接

谁践踏了优雅 2023-02-21 11:54 35阅读 0赞
Elasticsearch7.0.1 使用jdbc连接
项目中添加maven依赖
  1. <repositories>
  2. <repository>
  3. <id>elastic.co</id>
  4. <url>https://artifacts.elastic.co/maven</url>
  5. </repository>
  6. </repositories>
  7. <dependency>
  8. <groupId>org.elasticsearch.plugin</groupId>
  9. <artifactId>x-pack-sql-jdbc</artifactId>
  10. <version>7.0.1</version>
  11. </dependency>
使用测试代码连接
  1. package com.hts;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. import java.util.Properties;
  7. public class ESJdbcTest {
  8. static String driver = "org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver";
  9. static String elasticsearchAddress = "192.168.79.128:9200";
  10. public static Properties connectionProperties(){
  11. Properties properties = new Properties();
  12. //如果集群设置了密码
  13. //properties.put("user", "test_admin");
  14. //properties.put("password", "x-pack-test-password");
  15. return properties;
  16. }
  17. public static void main(String[] args) {
  18. String address = "jdbc:es://http://" + elasticsearchAddress;
  19. Properties connectionProperties = connectionProperties();
  20. try {
  21. Connection connection = DriverManager.getConnection(address, connectionProperties);
  22. Statement statement = connection.createStatement();
  23. ResultSet results = statement.executeQuery(
  24. "SELECT firstname, account_number FROM bank ORDER BY account_number DESC LIMIT 5");
  25. while(results.next()){
  26. System.out.println(results.getString("firstname"));
  27. }
  28. }catch (Exception e){
  29. e.printStackTrace();
  30. }
  31. }
  32. }

异常:发现Exception in thread “main” java.sql.SQLInvalidAuthorizationSpecException: current license is non-compliant for [jdbc] 的错误需要破解xpth,更新白金许可;

  • 在/elasticsearch-7.0.1/modules/x-pack-core目录下找到x-pack-core-7.0.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参数(对应的jar包在elasticsearch安装包中都有)

    javac -cp “F:\es\x-pack-core-7.0.1.jar;F:\es\lucene-core-8.0.0.jar;F:\es\elasticsearch-7.0.1.jar;F:\es\elasticsearch-core-7.0.1.jar” F:\es\LicenseVerifier.java
    javac -cp “F:\es\x-pack-core-7.0.1.jar;F:\es\lucene-core-8.0.0.jar;F:\es\elasticsearch-7.0.1.jar;F:\es\elasticsearch-core-7.0.1.jar” F:\es\XPackBuild.java

  • 将编译生成的LicenseVerifier.class覆盖复制出来的x-pack-core-7.0.1.jar中目录org/elasticsearch/license下的LicenseVerifier.class,将生成的XPackBuild.class覆盖org/elasticsearch/xpack/core目录下的XPackBuild.class

  • 将覆盖成功后的x-pack-core-7.0.1.jar复制回/elasticsearch-7.0.1/modules/x-pack-core目录下覆盖原来的
  • 获取 license 证书
    ①:https://license.elastic.co/registration填些用户名,邮箱(重要,获取下载链接),Country选择China,其他信息随意填写,点击Send
    ②打开邮箱获取的地址,将下载后的文件改名为license.json
    format_png
    format_png 1
    ③修改文件中的内容,将两个属性改为以下
    将 “type”:“basic” 替换为 “type”:“platinum” # 基础班变更为铂金版
    将 “expiry_date_in_millis”:1561420799999替换为
    ④使用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

    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,35人围观)

还没有评论,来说两句吧...

相关阅读