spring boot应用程序连接配置单元数据源:java.sql.sqlexception:org.apache.thrift.transport.ttTransportException

kcwpcxri  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(489)

我正在用spring boot应用程序连接到一个配置单元数据源。下面是数据源配置

import org.apache.commons.dbcp.BasicDataSource;
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 javax.sql.DataSource;
import java.io.IOException;

@Configuration
public class HiveDataSourceConfig {

    @Value("${hive.url}")
    private String url;

    @Value("${hive.username}")
    private String username;

    @Value("${hive.password}")
    private String password;

    public DataSource getHiveDataSource() {

        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(url);
        dataSource.setDriverClassName("org.apache.hive.jdbc.HiveDriver");
        dataSource.setUsername(username);
        dataSource.setPassword(password);

        return dataSource;
    }

    @Bean(name = "jdbcTemplate")
    public JdbcTemplate getJDBCTemplate() throws IOException {
        return new JdbcTemplate(getHiveDataSource());
    }
}

这是我连接到的jdbc url
jdbc:hive2http://hpeee.hpc.company。com:8443/;ssl=真;ssltruststore=/users/arun/downloads/truststore.jks;truststorepassword=password123;传输模式=http;httppath=one/默认值/hive
我连接到hive数据库以获取8000多条记录。。连接工作得非常好,有时我会得到以下例外
java.sql.sqlexception:org.apache.thrift.transport.tttransportexception:org.apache.http.nohttpresponseexception
有时我会得到下面的例外
org.apache.hive.service.cli.hivesqlexception:会话句柄无效:
当我在google上搜索这些异常的原因时,我可以看到一些响应,告诉我这是由于配置单元服务器的问题造成的。。。
但是,当我重新启动我的应用程序(连接到hivedb)时,这个失败就消失了,过了一段时间又回来了。
你知道吗?

inb24sb2

inb24sb21#

@阿伦作为你的评论之一指出,“它的工作非常好。。只有在空闲了一段时间后,我才得到异常“这似乎是我和连接池的问题。由于一段空闲时间后的活动/空闲/超时属性,当新请求进入时,池中没有正确可用的连接对象。
使用springboot,您可以用下面这样一种比上面的示例代码更好的方式使用和池。
在应用程序属性文件中

// These are tomcat connection pool properties.
// Sprign boot properties document link provided below 
spring.datasource.hivedb.username=
spring.datasource.hivedb.password=
spring.datasource.hivedb.url=
spring.datasource.hivedb.driver-class-name=
spring.datasource.hivedb.initial-size=<<define as per your load>>
spring.datasource.hivedb.validation-query=<<for hive select query>>
spring.datasource.hivedb.validation-query-timeout=3
spring.datasource.hivedb.test-on-borrow=true
spring.datasource.hivedb.max-wait=60000

在java配置文件中

@Configuration
public class HiveDataSourceConfig {

@Bean(name = "hiveDataSource")
@ConfigurationProperties(value = "spring.datasource.hivedb",ignoreUnknownFields = false)   public DataSource hiveDataSource() {
return DataSourceBuilder.create().build();
}

@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate(){
return new JdbcTemplate(hiveDataSource());
}
}

spring boot数据属性文档链接
https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html#data-属性
本文提供了spring框架为框架支持的多个连接池定义的属性的详细信息。使用它们作为参照来调整它们。
如我的示例应用程序属性所示,您需要根据需要测试和调整它们。

相关问题