当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot运行基于Flyway Java的回调

段劲
2023-03-14

有没有办法用Spring boot运行基于Flyway Java的回调?我正在转换一个现有项目,在每次迁移后更新一些视图定义,这是由Java完成的,因为它需要一些额外的逻辑。我知道它可以在pl/pgsql中完成(我们正在使用Postgres),但它已经在Java中完成并测试过了。

Spring Boot文档说这是可能的,但是它列出了回调脚本应该与迁移位于同一个目录中,也许这只适用于基于SQL的回调。

此代码在没有Spring Boot的情况下工作:

    Flyway flyway = new Flyway();
    flyway.setDataSource(this.getDataSource());
    flyway.setLocations("/db/migration");
    flyway.setCallbacks(new LogMaintenanceFlywayCallback());
    flyway.migrate();

我在/db/迁移中进行了几次迁移,每次迁移后我都需要执行回调。它适用于我当前的项目,我需要在Spring Boot中执行相同的操作(或以其他方式获得相同的行为)。

共有3个答案

於彬
2023-03-14

可以覆盖Flyway迁移策略

@Component
public class CallbackFlywayMigrationStrategy implements FlywayMigrationStrategy {

    @Override
    public void migrate(Flyway flyway) {
        flyway.setCallbacks(new LogMaintenanceFlywayCallback());
        flyway.migrate();
    }

}
高高雅
2023-03-14

似乎无法在Spring Boot自动配置中设置回调(请参阅FlywayAutoConfiguration.java)

您可以做两件事:

  1. 在一个配置类中创建自己的Flyway实例。如果您这样做,Spring Boot将不会创建他的实例
郜驰
2023-03-14

您可以有这样的配置,它可以工作:

@Configuration
public class FlywayFactory {

    @Bean
    public FlywayMigrationInitializer flywayInitializer(Flyway flyway, FlywayCallback flywayCallback) {
        flyway.setCallbacks(flywayCallback);
        return new FlywayMigrationInitializer(flyway);
    }

    @Bean
    public FlywayCallback flywayCallback() {
        return new LogMaintenanceFlywayCallback();
    }
}
 类似资料:
  • 我有一个Spring启动应用程序,需要: 可以在servlet容器中作为战争部署 通过“mvn Spring Boot:运行”可运行`` 我还希望通过右键单击并运行它,能够在我的IDE(Eclipse或IntelliJ IDEA社区)中运行此应用程序。 下面是我的pom.xml的有趣部分(注意,我不是从spring boot starter父pom继承的): 这是我的: 在IDE中运行main时,

  • 我有几个繁重的Spring集成测试(是的,这不是最好的方法,我没有时间正确地模拟所有外部dep) 下面是测试的典型注释 由于以下原因,测试会定期失败: 这里有两个问题:1、让测试共存的正确方式是什么?我在surefire插件中设置了forkCount=0。好像有帮助 2.1. 在每次测试期间,我实际上不需要启动所有的

  • 基于Mesos运行Spark 背景介绍       Spark有多种集群运行模式,例如:Standalone,Yarn,Mesos。       下面就说一下如何在Mesos上运行Spark,这也是官方推荐的一种运行方式。       在运行Spark之前咱们先简略介绍一下Mesos。       Mesos计算框架是一个集群管理器,提供了有效的、跨分布式的应用或框架的资源隔离和共享,可以运行Ha

  • 我将环境变量设置为。 在这个目录下,我有一个名为bin的文件夹,它包含一个脚本。如何使用system变量从PowerShell中的任何地方运行此脚本? 我尝试过以下方法,但没有成功:

  • 我正在将一个旧的java Spring项目重构为springboot,并以传统的war风格部署它。出于某种原因,我必须坚持传统的web.xml来启动应用程序。多亏了Springboot遗产,我可以通过web.xml实现这一点: 此外,我添加了springboot执行器依赖项。应用程序。属性如下所示: 应用程序可以正常启动,但当我尝试从浏览器访问endpoint时,它只返回一个“401需要完全身份验

  • 使用像Activiti这样的现代工作流引擎的主要驱动因素之一是它对云和多租户的支持。我们目前的内部工作流引擎缺乏这些功能。所以,我们正计划用Activiti取代它。 当前的想法是,我们将Activiti作为一个独立的应用程序运行。我们的应用程序(多个实例)将使用REST API与Activiti应用程序交互。