Her*_*erb 6 modularity database-migration flyway spring-boot spring-config
我有一个模块化Spring Boot
项目。作为数据库模式管理器,我想使用Flyway
. 如前所述,该项目是模块化的。这是因为会有使用不同模块的不同配置。这意味着,我想将与模块相关的所有内容打包到其特定项目中。有了Flyway
这个似乎没那么简单。
我理想中的想象:
ApplicationA
|
|_Module1
| |
| |_db/migration
| |
| |_V1__InitModule1Tables
| |_V2__MigrateSomeTable
|
|_Module2
|
|_db/migration
|
|_V1__InitModule2Tables
|_V2__MigrateSomeTable
Run Code Online (Sandbox Code Playgroud)
每个模块都独立定义自己的飞行脚本,因为无论如何它们都不知道彼此的存在。每个模块显然都需要在共享数据库中拥有自己的飞行历史表。这样,整个系统解耦和配置下一个应用程序ApplicationB
使用Module1
,并Module3
不会是一个麻烦。
好吧,我没有找到Flyway
达到此解决方案的任何配置可能性。
在每个模块中做这样的事情显然是一个坏主意,因为 bean 的初始化/执行顺序是相当随机的,导致当我需要它们用于其他配置时没有创建表。也显得凌乱。
@Configuration
public class Module1Config {
@Autowired
public void flyway(DataSource dataSource) {
Flyway flyway = new Flyway();
flyway.setBaselineOnMigrate(true);
flyway.setTable(flyway.getTable() + "-module1");
flyway.setDataSource(dataSource);
flyway.migrate();
}
}
Run Code Online (Sandbox Code Playgroud)
我不认为我是第一个试图实现这一目标的人。我怎样才能达到所需的模块化Flyway
配置?
以下解决方案以重复主题所建议的方式工作,对我有用:
我在我的base
模块中创建了一个配置模板,它被任何其他模块使用,因为它提供了日志和日志等全局功能。
public abstract class FlywayConfig {
private final String moduleName;
public FlywayConfig(String moduleName) {
this.moduleName = moduleName;
}
private final String baseScriptLocation = "classpath:db.migration.";
@Autowired
public void migrate(DataSource dataSource) {
Flyway flyway = new Flyway();
flyway.setDataSource(dataSource);
flyway.setSchemas(moduleName.toUpperCase());
flyway.setLocations(baseScriptLocation + moduleName.toLowerCase());
flyway.migrate();
}
}
Run Code Online (Sandbox Code Playgroud)
在每个模块中,我只是简单地扩展了这个配置类
@Configuration
public class BaseConfig extends FlywayConfig {
public static final String MODULE_NAME = "base";
public BaseConfig() {
super(MODULE_NAME);
}
}
Run Code Online (Sandbox Code Playgroud)
而我将我的飞行脚本保存在 db.migration.*MODULE_NAME*
这里实际上只有两种可能的情况:
您的模块是完全独立的,数据库中属于不同模块的对象之间没有关系:每个模块使用单独的模式历史表。
您的模块确实具有与属于其他模块的对象有关系的数据库对象:您现在实际上拥有数据库的单个全局生命周期,因此应该对所有模块使用单个模式历史表。
有关模块化应用的更多信息: https: //speakerdeck.com/axelfontaine/majestic-modular-monoliths
归档时间: |
|
查看次数: |
2081 次 |
最近记录: |