0

.sql从部署在 CloudBees 中的 Java 应用程序将完整文件(带有 DDL 和 DML 语句)导入 mysql 数据库的最佳方法是什么?

我是否应该尝试获取运行时进程并查看类似的方法是否有效

  Runtime rt = Runtime.getRuntime();
  Process pr = rt.exec("mysql -p -h ServerName DbName < dump.sql");

(上一个问题中针对自托管环境的推荐解决方案,不确定在 CloudBees 托管应用程序中是否可以执行访问 mysql 的进程)?

有更好的解决方案吗?(同样,要从应用程序中执行它,.sql要导入的文件将由用户提供,作为他与 Web 应用程序交互的一部分)。

我真的很想避免解析.sql文件并通过jdbc一一发送句子。

4

2 回答 2

2

我自己没有尝试过,但Flyway似乎可以让您在 CloudBees 上初始化应用程序期间导入 SQL 文件。

Flyway 试图将流行的 Ruby数据库迁移概念引入 Java。Flyway 将允许您将 .sql 文件放在应用程序的类路径中,然后您可以根据需要使用一些 Java 代码来更新您的数据库。

根据他们的迁移文档,您应该能够将 .sql 文件作为名为 V1__Initial_version.sql 的文件放入类路径上的 /db/migration/ 目录中。然后,您将使用以下代码在应用程序启动时触发迁移:

import com.googlecode.flyway.core.Flyway;
...

Flyway flyway = new Flyway();
flyway.setDataSource(...);
flyway.migrate();

我注意到Flyway 常见问题解答解释说数据库在迁移期间被锁定,因此即使您在 CloudBees 上扩展应用程序以使用多个实例(非常好!!),这种方法也应该有效。

于 2012-11-15T18:49:12.497 回答
0

试一试我猜。mysql cmd 工具可能在也可能不在主机上。如果不是,我们可能会添加它们。

另一种选择是使用 Jenkins 工作来完成。您可以公开一个 jenkins 调用并加载数据库的 api。

于 2012-11-15T09:30:19.690 回答