从 Java 代码中使用 Flyway 创建新模式
Posted
技术标签:
【中文标题】从 Java 代码中使用 Flyway 创建新模式【英文标题】:Create new schema using Flyway from Java code 【发布时间】:2021-04-20 10:02:39 【问题描述】:我们在代码库中引入了 Flyway。以前,我们将 Postgres 函数存储在公共模式中,并使用它来复制租户模式以创建与租户模式具有相同结构的新模式。 repo代码如下:
@Repository
public interface TenantRepository extends JpaRepository<Tenant, UUID>
@Query(nativeQuery = true, value = "SELECT clone_schema(:defaultSchema,:newSchema,:isCopyData);")
String callCloneSchema(@Param("defaultSchema") String defaultSchema, @Param("newSchema") String newSchema,@Param("isCopyData") boolean isCopyData);
我想删除这些函数并想使用 Flyway 创建一个新架构。 Flyway 是否提供这种可能性?
【问题讨论】:
这个答案有帮助吗? ***.com/a/60239471/4214241 @R.G 不是,我想使用 Flyway 创建一个新的模式运行时 【参考方案1】:以下是一些用于手动触发具有单个架构的 Flyway 迁移的步骤:
1.禁用“自动迁移”
默认情况下,Spring boot 会自动运行 Flyway SQL 脚本。所以你必须禁用这个“自动迁移”(见4.3. in this Blog)。这里,这是在“Spring Boot 主类”中完成的:
@SpringBootApplication
public class FooApplication
public static void main(String[] args)
SpringApplication.run(FooApplication.class, args);
@Bean
public FlywayMigrationStrategy flywayMigrationStrategy()
return flyway ->
// do nothing
;
2。手动迁移
要使用不同的架构自动进行迁移,这是一种解决方案:
注入(默认)Flyway
实例
复制配置但覆盖要使用的架构
触发迁移
示例代码:通过 GET 请求触发迁移(SQL 文件在 src/main/resources/db/migration/V#_#_#__xyz.sql
下)
@Controller
public class FooController
@Autowired
Flyway flyway;
@GetMapping("foo")
public ResponseEntity<?> foo(@RequestParam("schema") String schema)
Flyway.configure()
// apply/use the default (Spring) flyway configiration
.configuration(flyway.getConfiguration())
// use the passed schema
.schemas(schema)
.defaultSchema(schema)
// get a Flyway instance
.load()
// run the migration
.migrate();
return ResponseEntity.noContent().build();
【讨论】:
以上是关于从 Java 代码中使用 Flyway 创建新模式的主要内容,如果未能解决你的问题,请参考以下文章
Flyway spring boot + java,由hibernate创建的新本地数据库,但现在迁移尝试应用已经发生的迁移