部署的Java Spring应用程序:无法连接到Heroku上的JawsDB

时间:2020-05-21 10:18:08

标签: java mysql spring heroku mariadb

我正在尝试在具有MariaDB数据库的Heroku上部署Java Spring应用程序。在Heroku上,我建议使用JawsDB。所有连接属性都是通过集成的Heroku环境变量设置的。使用Heroku CLI进行的构建和部署成功完成。 使用HeidiSQL到同一个JawsDB的连接效果很好,因此URL参数应该正确。该应用程序以相同的方式运行并连接到本地MariaDB,而没有任何问题。我还尝试将数据库驱动程序设置为“ com.mariadb.jdbc.Driver”和“ org.mysql.jdbc.Driver”,但它们均失败。

部署应用程序时,出现以下错误堆栈:

org.flywaydb.core.internal.exception.FlywaySqlException: 
Unable to obtain database connection
------------------------------------
SQL State  : null
Error Code : 0
Message    : Cannot create JDBC driver of class 'com.mysql.jdbc.Driver' for connect URL 
'mysql://u3r5w4ayhxzdrw87.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/{database_name}'
java.sql.SQLException: No suitable driver

这是 AppConfiguration.java 中的Bean配置,它在本地运行应用程序时有效:

@Bean
public BasicDataSource dataSource() throws ClassNotFoundException {
    BasicDataSource basicDataSource = new BasicDataSource();
    Class.forName("com.mysql.jdbc.Driver");
    basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
    basicDataSource.setUrl(System.getenv("JDBC_URL"));
    basicDataSource.setUsername(System.getenv("JDBC_USERNAME"));
    basicDataSource.setPassword(System.getenv("JDBC_PASSWORD"));

    return basicDataSource;
}

我还要复制 pom.xml 中配置的依赖项:

    (...)
        <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals><goal>copy</goal></goals>
                        <configuration>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>com.heroku</groupId>
                                    <artifactId>webapp-runner</artifactId>
                                    <version>9.0.30.0</version>
                                    <destFileName>webapp-runner.jar</destFileName>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals><goal>copy-dependencies</goal></goals>
                    </execution>
                </executions>
            </plugin>
    (...)

Procfile:

web: java $JAVA_OPTS -jar target/dependency/webapp-runner.jar --port $PORT target/*.war

我将包含MySQL和MariaDB连接驱动程序的.jar文件复制到 WEB-INF / libs 文件夹:mariadb-java-client-2.3.0.jarmysql-connector-java-8.0.20.jar

有人有建议或发现有用的东西吗?

1 个答案:

答案 0 :(得分:0)

mysql://u3r5w4ayhxzdrw87.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/不是有效的JDBC URL,很可能是造成问题的原因。

您在Heroku上使用哪个环境变量?

我们将标准DATABASE_URL(以及其他语言,包括JAWSDB_URLJAWSDB_MARIA_URL)重写为JDBC兼容的URL,并以JDBC_DATABASE_URL的形式提供。 JDBC_USERNAMEJDBC_PASSWORD也可用。尝试使用它们,看看是否能解决您的问题。