Heroku找不到Postgres JDBC Driver

时间:2016-04-17 22:39:08

标签: java postgresql maven heroku jdbc

使用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或其他什么东西吗?

2 个答案:

答案 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。