首页 > 解决方案 > 从本地 GlassFish 连接到 Heroku PostgreSQL 的问题

问题描述

我正在尝试在本地 GlassFish 服务器中获取 JDBC 连接池和资源设置以连接到 Heroku PostgreSQL 实例。

我已经在 Tomcat 设置中尝试了它作为资源,它工作正常,但在 GlassFish 中我遇到了一些问题。

首先,我不得不将我的 Java 8 版本降级到 151 以阻止我遇到的一个错误。现在,当我尝试在我的应用程序中执行查询时,我得到:

java.net.ConnectException: Connection refused (Connection refused)

我认为这与必须使用 SSL 的 Heroku PostgreSQL 连接有关,但我不确定在 GlassFish 中需要做什么来配置它。

有没有人有这样做的经验?

标签: javapostgresqlherokuglassfishheroku-postgres

解决方案


经过大量的挠头和谷歌搜索,我终于得到了这个工作。上面的例外是红鲱鱼。它抱怨它无法连接到作为 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&amp;sslfactory=org.postgresql.ssl.NonValidatingFactory在其他地方为我工作的)。

所以关键是使用JDK 1.8.0_151,在资源属性中使用mappedName ,在连接字符串中使用sslmode=require 。

生活不应该这么复杂...


推荐阅读