在maven项目中使用JDBC连接到Athena [英] Connect to Athena using JDBC in a maven project

查看:282
本文介绍了在maven项目中使用JDBC连接到Athena的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试连接到Amazon Athena,在maven项目中使用jdbc,但是正在引发异常。我认为这个课程没有找到。在Athena的指南中它说:

I'm trying to connect to the Amazon Athena, using jdbc in a maven project, but an exception is being raised. I think that the class is not being found. In Athena's guide it says:



  1. 设置JDBC属性aws_credentials_provider_class,等于类名,并将其包含在类路径中。 (1)

  1. Set the JDBC property, aws_credentials_provider_class, equal to the class name, and include itin your classpath. (1)


由于我正在使用eclipse,我认为该类已经在类路径中,但显然不是。我在一个简单的java项目(不是maven)中测试了代码并且它有效。

Since I'm using eclipse, I thought that the class would be already in the classpath, but apparently not. I tested the code in a simple java project (not maven) and it worked.

AmazonCredentialsProvider.java

package athena;
import com.amazonaws.auth.AWSCredentials;

public class AmazonCredentials implements AWSCredentials {
    @Override public String getAWSAccessKeyId() { return "..."; }
    @Override public String getAWSSecretKey() { return "..."; }
}

AmazonCredentialsProvider.java

package athena;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;

public class AmazonCredentialsProvider implements AWSCredentialsProvider {
    @Override public AWSCredentials getCredentials() { return new AmazonCredentials(); }
    @Override public void refresh() {}
}

代码连接片段:

Class.forName("com.amazonaws.athena.jdbc.AthenaDriver");

Properties properties = new Properties();
properties.setProperty("user", user);
properties.setProperty("password", password);

properties.setProperty("aws_credentials_provider_class", "athena.AmazonCredentialsProvider");
Connection connection = DriverManager.getConnection("jdbc:awsathena://athena." + region + ".amazonaws.com:443", properties);

例外情况:


java.sql.SQLException:无法加载AWS凭证提供程序类:
athena.AmazonCredentialsProvider at
com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda $ parseProperties $ 2(AthenaDriverPropertiesFactory.java:52 )
at
com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.setClientConfigProperty(AthenaDriverPropertiesFactory.java:159)
at
com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.parseProperties(AthenaDriverPropertiesFactory) .java:40)
at
com.amazonaws.athena.jdbc.AthenaDriver.connect(AthenaDriver.java:110)
at java.sql.DriverManager.getConnection(Unknown Source)at
java.sql.DriverManager.getConnection(未知来源)at
athena.Athena。(Athena.java:94)at
services.GraphService.verify(GraphService.java:194)at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at
java.lang.reflect.Method.invoke(Unknown Source)at at
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda $ static $ 0(ResourceMethodInvocationHandlerFactory.java:76)
at
org.glassfish.jersey.server.model.internal。 AbstractJavaResourceMethodDispatcher $ 1.run(AbstractJavaResourceMethodDispatcher.java:148)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
at
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:183)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch( AbstractJavaResourceMethodDispatcher.java:103)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.lambda $ apply $ 0 (ResourceMethodInvoker.java:405)
at
org.glassfish.jersey.server.ServerRuntime $ AsyncResponder $ 2 $ 1.run(ServerRuntime.java:843)
at org.glassfish.jersey.internal 。错误$ 1.call(Errors.java:272)at
org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:268)at
org.glassfish.jersey.internal.Errors .process(Errors.java:316)位于
org.glassfish.jersey.internal.Errors.process(Errors.java:298)
org.glassfish.jersey.internal.Errors.process(错误) .java:268)at
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
at
org.glassfish.jersey.server.ServerRuntime $ AsyncResponder $ 2.run(ServerRuntime.java:838)
at java.util.concurrent.Executors $ RunnableAdapter.call(Unknown
Source )at
java.util.concurrent.FutureTask.run(Unknown Source)at
java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)at
java.util.concurrent.ThreadPoolExecutor $ Worker.run(来自
的未知来源java.lang.Thread.run(未知来源)引起:
java.lang.ClassNotFoundException:athena.AmazonCredentialsProvider at
java.net.URLClassLoader.findClass(Unknown Source )at
java.lang.ClassLoader.loadClass(Unknown Source)at
java.lang.ClassLoader.loadClass(Unknown Source)at
java.lang.Class.forName0(Native Method)at at
java.lang.Class.forName(未知来源)at
com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda $ parseProperties $ 2(AthenaDriverPropertiesFactory.java:44)
... 31更多

java.sql.SQLException: Failed to load AWS credentials provider class: athena.AmazonCredentialsProvider at com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda$parseProperties$2(AthenaDriverPropertiesFactory.java:52) at com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.setClientConfigProperty(AthenaDriverPropertiesFactory.java:159) at com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.parseProperties(AthenaDriverPropertiesFactory.java:40) at com.amazonaws.athena.jdbc.AthenaDriver.connect(AthenaDriver.java:110) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at athena.Athena.(Athena.java:94) at services.GraphService.verify(GraphService.java:194) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191) at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:183) at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103) at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493) at org.glassfish.jersey.server.model.ResourceMethodInvoker.lambda$apply$0(ResourceMethodInvoker.java:405) at org.glassfish.jersey.server.ServerRuntime$AsyncResponder$2$1.run(ServerRuntime.java:843) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272) at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268) at org.glassfish.jersey.internal.Errors.process(Errors.java:316) at org.glassfish.jersey.internal.Errors.process(Errors.java:298) at org.glassfish.jersey.internal.Errors.process(Errors.java:268) at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289) at org.glassfish.jersey.server.ServerRuntime$AsyncResponder$2.run(ServerRuntime.java:838) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: athena.AmazonCredentialsProvider at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda$parseProperties$2(AthenaDriverPropertiesFactory.java:44) ... 31 more

有谁知道如何解决它?

推荐答案

您使用的是最新版本的JDBC驱动程序吗?

Are you using the latest version of the JDBC driver?

如果是,请尝试遵循这些说明:

If yes, try to follow these instructions:

https://docs.aws.amazon.com/redshift/latest/mgmt/configure-jdbc-connection-with-maven.html

这篇关于在maven项目中使用JDBC连接到Athena的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆