我在eclipse工作区的2个不同项目中创建了两个不同的Flyway实例。
它们指向不同的数据源/ 2个diff数据库,并且还有单独的src.main.resources.db.migration包。每个包都包含各个数据库的不同sql文件。
当我启动我的应用程序时,Flyway仅识别来自一个项目的脚本(首先是项目初始化),并且还将脚本从该项目执行到另一个DB。
Flyway是否可以同时更新2个数据库?
感谢您的回复。但是,请您解释一下如何在Java Code中实现它。 例如:Curretnly我使用以下方式...
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。
答案 0 :(得分:1)
定义第二个飞路豆。然后向两个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_");