【发布时间】:2018-08-29 16:55:21
【问题描述】:
我正在尝试连接到 Amazon Athena,在 maven 项目中使用 jdbc,但出现异常。我认为找不到课程。在雅典娜的指南中它说:
- 将 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() {}
}
连接的代码sn-p:
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 位于 com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda$parseProperties$2(AthenaDriverPropertiesFactory.java:52) 在 com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.setClientConfigProperty(AthenaDriverPropertiesFactory.java:159) 在 com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.parseProperties(AthenaDriverPropertiesFactory.java:40) 在 com.amazonaws.athena.jdbc.AthenaDriver.connect(AthenaDriver.java:110) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 java.sql.DriverManager.getConnection(Unknown Source) 在 athena.Athena.(Athena.java:94) 在 services.GraphService.verify(GraphService.java:194) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)在 java.lang.reflect.Method.invoke(未知来源)在 org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191) 在 org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$VoidOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:183) 在 org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103) 在 org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493) 在 org.glassfish.jersey.server.model.ResourceMethodInvoker.lambda$apply$0(ResourceMethodInvoker.java:405) 在 org.glassfish.jersey.server.ServerRuntime$AsyncResponder$2$1.run(ServerRuntime.java:843) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:272) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:268) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:316) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:298) 在 org.glassfish.jersey.internal.Errors.process(Errors.java:268) 在 org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289) 在 org.glassfish.jersey.server.ServerRuntime$AsyncResponder$2.run(ServerRuntime.java:838) 在 java.util.concurrent.Executors$RunnableAdapter.call(未知 源)在 java.util.concurrent.FutureTask.run(未知源)在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源)在 java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 原因: java.lang.ClassNotFoundException:athena.AmazonCredentialsProvider 在 java.net.URLClassLoader.findClass(未知来源)在 java.lang.ClassLoader.loadClass(Unknown Source) 在 java.lang.ClassLoader.loadClass(Unknown Source) 在 java.lang.Class.forName0(本机方法)在 java.lang.Class.forName(未知来源)在 com.amazonaws.athena.jdbc.AthenaDriverPropertiesFactory.lambda$parseProperties$2(AthenaDriverPropertiesFactory.java:44) ... 31 更多
有人知道怎么解决吗?
【问题讨论】:
标签: java eclipse maven jdbc amazon-athena