Flyway的多个实例指向Java应用程序中的不同数据源

时间:2012-11-29 10:41:47

标签: java eclipse flyway

我在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。

1 个答案:

答案 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_");