java - 从本地 GlassFish 连接到 Heroku PostgreSQL 的问题
问题描述
我正在尝试在本地 GlassFish 服务器中获取 JDBC 连接池和资源设置以连接到 Heroku PostgreSQL 实例。
我已经在 Tomcat 设置中尝试了它作为资源,它工作正常,但在 GlassFish 中我遇到了一些问题。
首先,我不得不将我的 Java 8 版本降级到 151 以阻止我遇到的一个错误。现在,当我尝试在我的应用程序中执行查询时,我得到:
java.net.ConnectException: Connection refused (Connection refused)
我认为这与必须使用 SSL 的 Heroku PostgreSQL 连接有关,但我不确定在 GlassFish 中需要做什么来配置它。
有没有人有这样做的经验?
解决方案
经过大量的挠头和谷歌搜索,我终于得到了这个工作。上面的例外是红鲱鱼。它抱怨它无法连接到作为 GlassFish 默认资源的本地 Derby 数据库。这意味着问题实际上与无法找到我指定的资源有关。
以下是在 GlassFish 5 中获得连接所需的步骤:
- 将 JAVA_HOME 设置为 JDK 1.8.0_151(任何较新版本的 1.8 都不起作用) GlassFish 需要在此版本上运行。
- 在您的 Bean 类中使用
@Resource(mappedName = "jdbc/postgresql")
. 这是我可以让它找到我的 jdbc/postgresql 资源的唯一方法(@Resource(name = "jdbc/postgresql")
并且@Resource(name = "java:comp/env/jdbc/postgresql")
没有@Resource(lookup = "java:comp/env/jdbc/postgresql")
工作)。 - 连接网址必须是这样的:(
jdbc:postgresql://<host>:<port>/<databse>?sslmode=require
最初我有这个jdbc:postgresql://<host>:<port>/<databse>?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
在其他地方为我工作的)。
所以关键是使用JDK 1.8.0_151,在资源属性中使用mappedName ,在连接字符串中使用sslmode=require 。
生活不应该这么复杂...
推荐阅读
- java - java.sql.SQLException:列索引超出范围,2 > 1
- google-api - 前端和后端之间的 GAPI 集成
- python - Python3 - Pipenv 安装 mysqlclient?
- python - 在 Python 中删除压缩文件夹
- java - 如何有意义地记录演员设计
- alfresco-share - 露天共享网站仪表板仪表板
- spring-boot - Spring Boot 2:无法启动tomcat
- c# - 在 sql server 中从半径中查找多边形列表
- javascript - 如何在 html 中使用 javascript 自动更新数据库 mysql
- java - TextView.setText 由于线程而不工作?