Create new schema using Flyway from Java code

不打扰是莪最后的温柔 提交于 2021-01-29 10:49:09

问题


We have introduced Flyway inside the codebase. Previously, we have the Postgres function stored in the public schema and we use that to replicate the tenant schema to create a new schema that has the same structure as the tenant schema. The repo code is as follows:

@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);
}

I would like to delete these functions and want to create a new schema using the Flyway. Does Flyway offer such a possibility?


回答1:


Here are some steps used to manually trigger Flyway migration with individual schemas:

1. Disable "auto migration"

By default, Spring boot would like to automatically run the Flyway SQL scripts. So you have to disable this "auto migration" (see 4.3. in this Blog). Here, this is done in the "Spring Boot main class":

@SpringBootApplication                                        
public class FooApplication {                                 
                                                              
    public static void main(String[] args) {                  
        SpringApplication.run(FooApplication.class, args);    
    }                                                         
                                                              
    @Bean                                                     
    public FlywayMigrationStrategy flywayMigrationStrategy() {
        return flyway -> {                                    
            // do nothing                                     
        };                                                    
    }                                                         
                                                              
}                                                             

2. Manually migration

To automatically do migration using different schemas, this would be one solution:

  • inject (the default) Flyway instance
  • duplicate the configuration but overwrite the schemas to be used
  • trigger the migration

Example code: Trigger of the migration via a GET request (the SQL files are under 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();                        
    }                                                                     
                                                                          
}                                                                         


来源:https://stackoverflow.com/questions/65735010/create-new-schema-using-flyway-from-java-code

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!