繁体   English   中英

无法在 Spring Boot 中使用 JDBC 连接到 Phoenix

[英]Cant connect to Phoenix using JDBC in spring boot

我有一个 spring-boot 应用程序,我试图在其中配置 phoenix 数据源,但发现“没有合适的驱动程序”错误。

@Bean(name="phoenixDataSource")
@DependsOn(value = "placeholderConfigurer")
public DataSource phoenixDataSource() {
        SimpleDriverDataSource phoenixDataSource = new SimpleDriverDataSource();
        phoenixDataSource.setUrl( "jdbc:phoenix:localhost" );
        try {
            Class<?> driverClass = this.getClass().getClassLoader().loadClass("org.apache.phoenix.jdbc.PhoenixDriver");
            phoenixDataSource.setDriverClass((Class<? extends Driver>) driverClass);
        } catch( ClassNotFoundException e ) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

       );
        return phoenixDataSource;
    }

    @Bean(name = "phoenixJdbcTemplate")
    public JdbcTemplate phoenixJdbcTemplate(@Qualifier("phoenixDataSource") DataSource ds) {
        return new JdbcTemplate(ds);
    }

有两种驱动程序薄和厚。

您的代码正在使用厚驱动程序。 因此,您必须将 phoenix-core jar 文件添加到您的类路径中。

我正在使用 hdp 3.0.1.0-187 凤凰服务器。

在我的 gradle 配置中,如下所示。

实现('org.apache.phoenix:phoenix-core:5.0.0-HBase-2.0')

第一步,您需要找到您是否有权使用/usr/hdp/current/phoenix-client/bin/sqlline.py 连接到sqlline

 /usr/hdp/current/phoenix-client/bin/sqlline.py <Zoo-keeper-url>:2181:/hbase-unsecure

如果您的 Habse 未设置为不安全,因此您需要查找受 Ranger 授权保护的 Kerberos 或 HBase,您可以在日志中找到所需的信息。

现在您有以下三个连接选项

  • 不安全的 Zookeper URL

     "jdbc:phoenix:<Zookeeper_host_name> :<port_number> : /hbase-unsecure"); //With No password
  • 安全的 Zookeper URL

     "jdbc:phoenix:<Zookeeper_host_name>:<port_number>:<secured_Zookeeper_node>:<user_name> "
  • 带网址

     jdbc:phoenix:thin:url=<scheme>://<server-hostname>:<port>;authentication=vaquarkhan

默认动物园管理员端口 = 2181。

以下代码可用于设置连接确保您已将依赖项添加到 POM 文件中

聚甲醛:

      <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.3.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        
        <dependency>
            <groupId>jdk.tools</groupId>
            <artifactId>jdk.tools</artifactId>
            <version>1.8.0_05</version>
            <scope>system</scope>
            <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.apache.phoenix</groupId>
            <artifactId>phoenix-core</artifactId>
            <version>4.7.0-HBase-1.1</version>
            <exclusions>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>sqlline</groupId>
            <artifactId>sqlline</artifactId>
            <version>1.1.9</version>
        </dependency>

代码:

package com.khan.vaquar.config;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.jdbc.datasource.SimpleDriverDataSource;

/**
 * Database Configures for Phoenix database.
 */

@Configuration
public class DBConfig {
    @Bean
    public DataSource dataSource() {
        return new SimpleDriverDataSource(new org.apache.phoenix.jdbc.PhoenixDriver(),
                "jdbc:phoenix:<Zookeeper-URL> :<PORT_NO> : /hbase-unsecure"); 
                

    }

@Bean
   public NamedParameterJdbcTemplate databasePhoenixJdbcTemplate() {
        JdbcTemplate template = new JdbcTemplate(this.dataSource());
        template.setQueryTimeout("1500");
    return new NamedParameterJdbcTemplate(template);
   }
    
}

在您的回购中使用它进行连接

 @Autowired
 private NamedParameterJdbcTemplate databasePhoenixJdbcTemplate;

几个有用的链接:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM