3 回答

TA貢獻1811條經驗 獲得超4個贊
這對我來說很有用;
import static org.springframework.boot.WebApplicationType.NONE;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.flyway.FlywayAutoConfiguration;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.context.annotation.Import;
/**
* Utility to run flyway migration without starting service
*/
@SpringBootConfiguration
@Import({DataSourceAutoConfiguration.class, FlywayAutoConfiguration.class})
public class FlywayMigrationRunner {
public static void main(String[] args) {
SpringApplication application =
new SpringApplicationBuilder(FlywayMigrationRunner.class)
.web(NONE).build();
application.run(args);
}
}

TA貢獻1789條經驗 獲得超10個贊
基本上,我自己通過利用 Flyway 回調來實現它,并在遷移成功完成后簡單地關閉應用程序。整個過程由一個單獨的配置參數控制。
這是回調
public class PostMigrationCallback implements Callback {
private final FlywayCustomProperties flywayCustomProperties;
private final ApplicationContext applicationContext;
public PostMigrationCallback(FlywayCustomProperties flywayCustomProperties, ApplicationContext applicationContext) {
this.flywayCustomProperties = flywayCustomProperties;
this.applicationContext = applicationContext;
}
@Override
public boolean supports(Event event, Context context) {
if (event.getId().equalsIgnoreCase("afterMigrate") && flywayCustomProperties.isMigrationOnly()) {
log.info("Service is going to shutdown as configuration was set to spring.flyway.migrate-only=true and schema was migrated successfully");
int exitCode = SpringApplication.exit(applicationContext, () -> 0);
System.exit(exitCode);
}
return false;
}
@Override
public boolean canHandleInTransaction(Event event, Context context) {
return false;
}
@Override
public void handle(Event event, Context context) {
}
}
這里我們有配置參數
@Data
@Validated
@ConfigurationProperties(prefix = "spring.flyway")
public class FlywayCustomProperties {
@NotNull
private boolean migrationOnly;
}

TA貢獻1790條經驗 獲得超9個贊
是的,您可以使用 Flyway cli 來運行遷移,而無需啟動服務: https ://flywaydb.org/documentation/commandline/
添加回答
舉報