我正在尝试在具有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.jar
和mysql-connector-java-8.0.20.jar
。
有人有建议或发现有用的东西吗?
答案 0 :(得分:0)
mysql://u3r5w4ayhxzdrw87.cbetxkdyhwsb.us-east-1.rds.amazonaws.com:3306/
不是有效的JDBC URL,很可能是造成问题的原因。
您在Heroku上使用哪个环境变量?
我们将标准DATABASE_URL
(以及其他语言,包括JAWSDB_URL
和JAWSDB_MARIA_URL
)重写为JDBC兼容的URL,并以JDBC_DATABASE_URL
的形式提供。 JDBC_USERNAME
和JDBC_PASSWORD
也可用。尝试使用它们,看看是否能解决您的问题。