3

我在 Eclipse 工作区的 2 个不同项目中创建了两个不同的 Flyway 实例。

它们指向不同的数据源/2 diff 数据库,并且还有单独的 src.main.resources.db.migration 包。每个包都包含用于各自数据库的不同 sql 文件。

当我启动我的应用程序时,Flyway 仅从一个项目中识别脚本(首先初始化项目)并将脚本从该项目执行到另一个数据库。

Flyway 是否可以同时更新 2 个数据库?


谢谢回复。但是您能否解释一下如何在 Java 代码中实现这一点。例如:目前我正在使用以下方式......

            Flyway flyway = new Flyway();               
            InitialContext ictx = new InitialContext();
            DataSource dataSource = (DataSource) ictx.lookup("DS-name");
            flyway.setDataSource(dataSource);
            flyway.setLocations("main.resources.db.migration");//location under first project
                flyway.migrate();

                 Flyway flywaygen =  new Flyway;

            InitialContext ictx = new InitialContext();
            DataSource dataSource = (DataSource) ictx.lookup("DS-name");
            flywaygen.setDataSource(dataSource);
            flywaygen.setLocations("main.resources.emlogis.migration");//location                       under second project
                flywaygen.migrate();

问题是flywaygen也在寻找第一个项目位置。因此,如果在第一个位置添加了 3 个 sql 脚本,在第二个位置添加了 2 个脚本,则第二个 flyway 实例显示迁移 3 已完成。所以 flywaygen 也指向 main.resources.db.migration 而不是 main.resources.emlogis.migration。

4

1 回答 1

1

定义第二个flyway bean。然后向两个 flyway bean 添加不同的SqlMigrationPrefix属性并相应地命名您的迁移脚本。

例如

<bean class="com.googlecode.flyway.core.Flyway" init-method="migrate">
   <property name="dataSource" ref="dataSource1" />
   <property name="sqlMigrationPrefix" value="DB1_" />
</bean>
<bean class="com.googlecode.flyway.core.Flyway" init-method="migrate">
   <property name="dataSource" ref="dataSource2" />
   <property name="sqlMigrationPrefix" value="DB2_" />
</bean>

您的迁移脚本必须遵循以下命名方案:

DB1_1.0__initial_setup.sql
DB1_1.1__new_column.sql

DB2_1.0__initial_setup.sql
DB2_1.1__new_column.sql

编辑 - 通过代码配置:

在您的代码中,您有两个 Flyway 实例。这个实例相当于定义为一个spring bean。因此,您可以调用以下命令来实现相同的目的:

flyway.setSqlMigrationPrefix("DB1_");
flywaygen.setSqlMigrationPrefix("DB2_");
于 2012-11-29T12:30:22.543 回答