amazon-web-services - 运行 AWS Redshift docker 时出现空指针异常
问题描述
我正在尝试设置 Redshift docker。每当我尝试使用我的 java 代码运行容器时,我都会收到以下异常:
Caused by: java.sql.SQLException: [Amazon][JDBC](11380) Null pointer exception.
at com.amazon.redshift.client.PGClient.startSession(Unknown Source)
at com.amazon.redshift.client.PGClient.<init>(Unknown Source)
at com.amazon.redshift.core.PGJDBCConnection.connect(Unknown Source)
at com.amazon.jdbc.common.BaseConnectionFactory.doConnect(Unknown Source)
at com.amazon.jdbc.common.AbstractDriver.connect(Unknown Source)
at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138)
at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358)
at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206)
at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477)
at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560)
... 68 common frames omitted
我有一个包含以下详细信息的属性文件:
REDSHIFT_JDBC_DRIVER_CLASS_NAME = com.amazon.redshift.jdbc42.Driver
REDSHIFT_JDBC_URL = jdbc:redshift://localhost:5439/testDb
REDSHIFT_JDBC_USERNAME=test
REDSHIFT_JDBC_PASSWORD=
REDSHIFT_JDBC_FETCH_SIZE=21
然后我使用 Hikari 来获取数据源:
public DataSource redshiftDataSource() {
HikariConfig config = new HikariConfig();
config.setDriverClassName(this.env.getRequiredProperty("REDSHIFT_JDBC_DRIVER_CLASS_NAME"));
config.setJdbcUrl(this.env.getRequiredProperty("REDSHIFT_JDBC_URL"));
config.setLeakDetectionThreshold((Long)this.env.getRequiredProperty("REDSHIFT_JDBC_LEAK_DETECTION_THRESHOLD", Long.TYPE));
config.setMaximumPoolSize((Integer)this.env.getRequiredProperty("REDSHIFT_JDBC_MAX_POOL_SIZE", Integer.TYPE));
config.setMinimumIdle((Integer)this.env.getRequiredProperty("REDSHIFT_JDBC_MINIMUM_IDLE", Integer.TYPE));
config.setPoolName(this.env.getRequiredProperty("REDSHIFT_JDBC_POOL_NAME"));
config.setUsername(this.env.getRequiredProperty("REDSHIFT_JDBC_USERNAME"));
config.setPassword(this.env.getRequiredProperty("REDSHIFT_JDBC_PASSWORD"));
return new HikariDataSource(config);
}
然后我在剩下的工作中使用了这个数据源。
我正在使用这个 docker 映像来测试连接:https ://hub.docker.com/r/guildeducation/docker-amazon-redshift/ 。对此的任何帮助将不胜感激。
解决方案
您似乎没有提供密码。这肯定会导致建立新连接的代码产生 NPE。
你说你有一个“属性”文件,但这看起来更像是环境变量设置。假设是这种情况,并且您docker run
用于启动容器,您可以在命令行上提供密码:
docker run -d --rm -e REDSHIFT_JDBC_PASSWORD=my_secret_password CONTAINER:TAG
或者,您可以将环境设置存储在文件中,并使用--env-file
参数将其提供给容器。
推荐阅读
- scala - 如何在 IntelliJ 中更改捆绑 sbt 的 coursier 缓存目录
- javascript - 在高图地图中为动态变量格式化工具提示,一些用逗号,另一些用百分比
- reactjs - 如何在 React 中组织/管理上下文状态和辅助函数(主要是 API 调用)
- python - 如何在 DJANGO 中按最大数量的相同记录排序
- nuxt.js - 注销后 Nuxt 身份验证未重定向
- reactjs - React jwt登录刷新问题
- google-apps-script - Getting a “Google hasn’t verified this app” warning when creating a trigger - ok to ignore it?
- python - ELMo嵌入中的“Highway.forward:输入必须存在”?
- python - Python 和 Kivy 如何将值从一个类传递到另一个类?
- python-3.x - 我在 repl.it 上打印东西时遇到问题