在maven项目中使用JDBC连接到Athena

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

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

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

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凭证提供程序类:com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda $ parseProperties $ 2(AthenaDriverPropertiesFactory.java:52)at com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory中的athena.AmazonCredentialsProvider。 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位于athena.Athena的java.sql.DriverManager.getConnection(未知来源)的.DriverManager.getConnection(未知来源)。(Athena.java:94)位于sun.reflect的services.GraphService.verify(GraphService.java:194)。位于org.glassfish的java.lang.reflect.Method.invoke(未知来源)的sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)的sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)的NativeMethodAccessorImpl.invoke0(本地方法)。 JE 位于org.glassfish的org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher $ 1.run(AbstractJavaResourceMethodDispatcher.java:148)的rsey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda $ static $ 0(ResourceMethodInvocationHandlerFactory.java:76)。位于org.glassfish.jersey的org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider $ VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:183)的jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)。 server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)位于org.glassfish.jersey.server.model.ResourceMethodInvoker的org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)。 lambda $在org.glassfish.jersey.server.ServerRuntime $ AsyncResponder $ 2 $ 1.run(ServerRuntime.java:843)org上应用$ 0(ResourceMethodInvoker.java:405) 位于org.glassfish.jersey.internal.Errors.process的org.glassfish.jersey.internal.Errors $ 1.call(Errors.java:268)的.glassfish.jersey.internal.Errors $ 1.call(Errors.java:272) (Errors.java:316)org.glassfish.jersey.internal.Errors.process(Errors.java:298)位于org.glassfish的org.glassfish.jersey.internal.Errors.process(Errors.java:268)。 jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)atg.glassfish.jersey.server.ServerRuntime $ AsyncResponder $ 2.run(ServerRuntime.java:838)at java.util.concurrent.Executors $ RunnableAdapter.call (java.util.concurrent.TutureTask.run上的java.util.concurrent.FutureTask.run(未知来源)的java(未知来源)java.util.concurrent.ThreadPoolExecutor java.Man.run(未知来源)java上的java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) .lang.Thread.run(Unknown Source)由以下引起:java.lang.ClassNotFoundException:java.lang上的java.lang.ClassLoader.findClass(未知来源)的athena.AmazonCredentialsProvider java.lang上的java.lang.ClassLoader.loadClass(未知来源) 。类 来自com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda $ parseProperties $ 2(AthenaDriverPropertiesFactory.java)的java.lang.Class.forName(未知来源)的java.lang.Class.forName0(本地方法)中的Loader.loadClass(未知来源) :44)……还有31个

有谁知道如何解决它?

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

如果是,请尝试按照以下说明操作:

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