我有一个dropwizard 0.8.1应用程序,它使用多个(两个)休眠驱动的数据库。但是,我想保持两个数据库的迁移捆绑包彼此分开。
怎么做?对于hibernate bundle,我可以设置name(),这样度量不会被注册两次同名,但似乎无法为迁移设置文件名......
答案 0 :(得分:1)
此功能已添加到DW 1.0.0中。 它目前尚未发布,因此您可以使用快照。
目前来自github Migrations.rst
在此处复制相关部分:
支持添加多个迁移包
假设需要为两个不同的数据库进行迁移,则需要有两个不同的数据源工厂:
public class ExampleConfiguration extends Configuration {
@Valid
@NotNull
private DataSourceFactory database1 = new DataSourceFactory();
@Valid
@NotNull
private DataSourceFactory database2 = new DataSourceFactory();
@JsonProperty("database1")
public DataSourceFactory getDb1DataSourceFactory() {
return database1;
}
@JsonProperty("database2")
public DataSourceFactory getDb2DataSourceFactory() {
return database2;
}
}
现在可以添加多个迁移包,其名称如下:
@Override
public void initialize(Bootstrap<ExampleConfiguration> bootstrap) {
bootstrap.addBundle(new MigrationsBundle<ExampleConfiguration>() {
@Override
public DataSourceFactory getDataSourceFactory(ExampleConfiguration configuration) {
return configuration.getDb1DataSourceFactory();
}
@Override
public String name() {
return "db1";
}
});
bootstrap.addBundle(new MigrationsBundle<ExampleConfiguration>() {
@Override
public DataSourceFactory getDataSourceFactory(ExampleConfiguration configuration) {
return configuration.getDb2DataSourceFactory();
}
@Override
public String name() {
return "db2";
}
});
}
要迁移您的架构:
java -jar hello-world.jar db1 migrate helloworld.yml
和
java -jar hello-world.jar db2 migrate helloworld.yml
请注意
每当将名称添加到迁移捆绑包时,它就会成为需要在命令行运行的命令。例如:要检查数据库的状态,请使用status命令:
java -jar hello-world.jar db1 status helloworld.yml
或
java -jar hello-world.jar db2 status helloworld.yml
默认情况下,迁移捆绑包使用&#34; db&#34;命令。通过覆盖,您可以自定义它以提供您想要的任何名称并具有多个迁移捆绑包。无论在哪里&#34; db&#34;正在使用该命令,可以使用此自定义名称。
还需要提供不同的更改日志迁移文件。这可以作为
完成java -jar hello-world.jar db1 migrate helloworld.yml --migrations <path_to_db1_migrations.xml>
java -jar hello-world.jar db2 migrate helloworld.yml --migrations <path_to_db2_migrations.xml>
答案 1 :(得分:0)
除了@SouravMitra's answer关于如何使用Dropwizard 1.0.0及更高版本定义多个迁移包之外:
如果要将多个数据库迁移更改日志维护为单独文件,但仍然打包在应用程序jar中而不必使用--migrations <external-file-path-to-migrations.xml>
命令行参数引用它们,则可以配置通过覆盖getMigrationsFileName()
,将changelog filename作为迁移包的一部分,如下所示:
@Override
public void initialize(Bootstrap<ExampleConfiguration> bootstrap) {
bootstrap.addBundle(new MigrationsBundle<ExampleConfiguration>() {
@Override
public DataSourceFactory getDataSourceFactory(ExampleConfiguration configuration) {
return configuration.getDb1DataSourceFactory();
}
@Override
public String name() {
return "db1";
}
@Override
public String getMigrationsFileName() {
return "migrations_db1.xml";
}
});
bootstrap.addBundle(new MigrationsBundle<ExampleConfiguration>() {
@Override
public DataSourceFactory getDataSourceFactory(ExampleConfiguration configuration) {
return configuration.getDb2DataSourceFactory();
}
@Override
public String name() {
return "db2";
}
@Override
public String getMigrationsFileName() {
return "migrations_db2.xml";
}
});
然后,以下命令将自动使用应用程序jar中打包的migrations_db1.xml
中的migrations_db2.xml
和src/main/resources
迁移文件来迁移单独的数据库:
java -jar hello-world.jar db1 migrate helloworld.yml
和
java -jar hello-world.jar db2 migrate helloworld.yml