使用Maven为Heroku编写纯Java服务器应用程序。
连接到Heroku的Postgres数据库
运行本地时,一切正常,使用IntelliJ的配置运行Java应用程序,将Heroku的DB URL指定为环境变量。该应用程序工作,我可以连接到数据库
注意:我发现IntelliJ会以某种方式自动使用自己的Postgres驱动程序,我在pom.xml中指定的驱动程序会被忽略,显然
但是,当我部署应用程序时,一旦连接到数据库,我的Heroku日志中就会出现以下错误:
java.lang.ClassNotFoundException: org.postgresql.Driver
我遵循了Heroku教程,但是当我看到没有连接时,我把
Class.forName("org.postgresql.Driver");
之前
String dbUrl = System.getenv("JDBC_DATABASE_URL");
return DriverManager.getConnection(dbUrl);
只是为了确保找到驱动程序。如果我删除Class.forName()...
检查,则会收到no suitable driver found for
[我的数据库网址] 错误。
关于上一个错误,我尝试了 JDBC_DATABASE_URL 和 DATABASE_URL env vars,甚至用sslmode=require
手工构建数据库网址"等,但仍然没有运气
我的pom.xml指定了 modelVersion,groupId,artifactId,version 和 name ,以及:
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1208</version>
</dependency>
</dependencies>
Heroku用来启动应用程序的我的Procfile看起来像这样:
web: java $JAVA_OPTS -cp target/classes:"target/dependency/*" Main --port $PORT
当我部署应用程序时,我没有错误,构建成功。
驱动程序无法加载的原因是什么?我忘记了pom.xml,Procfile或其他什么东西吗?
答案 0 :(得分:1)
有时候,方便(比如像我一样使用IntelliJ的git集成推送到Heroku)会导致不必要的问题。
我使用git push
在Heroku上更新了我的应用。一切都很好,除了所需的图书馆没有落实到位
试过mvn heroku:deploy
,经过测试,一切正常!感谢codefinger提出建议。
如果有人问,如果以前从未这样做过,请按照以下方式进行操作:
1)将Heroku Maven Plugin添加到pom.xml
:
<build>
<plugins>
<plugin>
<groupId>com.heroku.sdk</groupId>
<artifactId>heroku-maven-plugin</artifactId>
<version>2.0.6</version>
</plugin>
</plugins>
</build>
2)执行maven目标heroku:deploy
就是这样
答案 1 :(得分:0)
我在本地系统上进行连接时遇到了同样的问题,但是在部署时却没有。是同样的问题,无法访问依赖项,但是对于使用JAR的构建,我只需要确保使用的所有依赖项都自包含的JAR。