Spring Boot BigQuery 数据源连接

Posted

技术标签:

【中文标题】Spring Boot BigQuery 数据源连接【英文标题】:Spring boot BigQuery datasource connection 【发布时间】:2021-06-18 18:55:27 【问题描述】:

我正在尝试使用 Simba jdbc 驱动程序从 Spring Boot 连接 BigQuery,但我遇到了异常。任何输入表示赞赏。我不确定为什么 spring-boot 正在寻找证书。我能够连接简单的 java 主类,但我只在 Spring 启动时收到此错误。

原因:org.springframework.beans.factory.BeanCreationException:创建名为“org.springframework.boot.autoconfigure.jdbc.DataSourceInitializerInvoker”的bean时出错:调用init方法失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:在类路径资源 [com/test/demo/services/config/DBConfig.class] 中定义名称为“getDataSource”的 bean 创建时出错:通过工厂方法进行的 bean 实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [com.simba.googlebigquery.jdbc42.DataSource]:工厂方法“getDataSource”抛出异常;嵌套异常是 java.sql.SQLException:[Simba]BigQueryJDBCDriver HttpTransport IO 错误:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径。

DataSource ds = new com.simba.googlebigquery.jdbc42.DataSource();
Connection connection = null;
ds.setURL(
    "jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=project)id;OAuthType=0;OAuthServiceAcctEmail=serviceAccountEmail;OAuthPvtKeyPath=p12CertPath;");

ds.setProjectId("projectId");
// ds.setOAuthType(0);

// connection = ds.getConnection();
connection = ds.getConnection();

【问题讨论】:

来自文档:“以下是连接的格式:jdbc:bigquery://[Host]:[Port];ProjectId=[Project];OAuthType=[AuthValue];[Property1]=[Value1];[Property2]=[Value2];...”。您的网址看起来不像那样。另外,尝试删除;之后的空格。 【参考方案1】:

从您的 JDBC URL 中删除多余的空格,它们似乎干扰了强制 OAuthPvtKeyPathOAuthServiceAcctEmail 参数:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=<Your Project ID>;OAuthType=0;OAuthServiceAcctEmail=<Your Email>;OAuthPvtKeyPath=<Path To Cert>;

【讨论】:

删除空格后,我现在收到此错误。 Spring 正在寻找证书路径。但我们没有使用 p12 文件以外的证书 原因:org.springframework.beans.factory.BeanCreationException:创建名称为 dataSource 的 bean 时出错。[com.simba.googlebigquery.jdbc42.DataSource]:工厂方法“getDataSource”抛出异常;嵌套异常是 java.sql.SQLException:[Simba][BigQueryJDBCDriver](100004) HttpTransport IO 错误:PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径。

以上是关于Spring Boot BigQuery 数据源连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 调用 BigQuery 存储过程(例程)

使用 spring-boot 连接到 spring-batch 和应用程序数据库

Spring Boot 连接到 localhost 数据库

在spring boot中连接到多个数据库

如何让 Spring Boot 自动重新连接到 PostgreSQL?

如何从 Spring Boot 连接到在线 MongoDB 数据库?