Java 如何在Heroku上运行Flyway迁移?
我在一个Maven Java项目上使用它进行迁移。我目前正在努力使部署到Heroku成为可能 在本地机器上,我使用Maven Flyway插件运行迁移:Java 如何在Heroku上运行Flyway迁移?,java,maven,heroku,flyway,Java,Maven,Heroku,Flyway,我在一个Maven Java项目上使用它进行迁移。我目前正在努力使部署到Heroku成为可能 在本地机器上,我使用Maven Flyway插件运行迁移: $>mvn干净编译飞行路线:迁移 要在heroku上执行同样的操作,我通常会尝试: $>heroku run mvn flyway:migrate 但是,mvn在构建阶段之后不可用,因此会产生错误(mvn:command not found) 如何在Heroku上运行flyway迁移?我认为最好的办法是在应用程序中创建一个使用FlywayDB
$>mvn干净编译飞行路线:迁移
要在heroku上执行同样的操作,我通常会尝试:
$>heroku run mvn flyway:migrate
但是,mvn在构建阶段之后不可用,因此会产生错误(mvn:command not found
)
如何在Heroku上运行flyway迁移?我认为最好的办法是在应用程序中创建一个使用FlywayDB Java API的小类。可能是这样的:
class Migrator {
public static void main(String[] args) throws Exception {
...
Flyway flyway = new Flyway();
flyway.setDataSource(url, user, password);
flyway.migrate();
}
}
migrate: java -cp target/classes:target/dependency/* Migrator
然后在程序文件中创建一个条目,如下所示:
class Migrator {
public static void main(String[] args) throws Exception {
...
Flyway flyway = new Flyway();
flyway.setDataSource(url, user, password);
flyway.migrate();
}
}
migrate: java -cp target/classes:target/dependency/* Migrator
最后,根据需要使用heroku run migrate运行它
Heroku在slug中不包含Maven的原因(即在运行时)是因为.m2
目录没有保留。如果包含Maven,然后运行mvn
命令,它首先必须下载internet。不保留.m2
目录,因为它会使slug大小过大。根据说明,不建议在运行Flyway迁移时使用Maven插件
在文件中有两种备选方案:
- (另请参见@codefinger's)
“它必须首先下载internet”,或者您可以在应用程序启动时运行迁移:-)