【问题标题】:Spring Boot 1.4: Executing Method after Liquibase finishedSpring Boot 1.4:Liquibase 完成后的执行方法
【发布时间】:2016-12-14 00:28:45
【问题描述】:

我有一个使用 Liquibase 的基于 Spring Boot 1.4.0 的项目。

是否可以在 liquibase 完成后执行方法?

类似 Bean 后处理器的东西?

当应用程序在开发模式下启动时,我想做的是向我的数据库添加一些数据。在开发模式下,应用程序使用内存中的 h2 数据库,因此 liquibase 必须先创建表,然后才能写入数据。

【问题讨论】:

    标签: java spring spring-boot liquibase


    【解决方案1】:

    另一种解决方案是让 LiquiBase 将这些内容插入到您的数据库中 - 但仅限于在开发模式下运行时。

    您可以在 LiquiBase 中通过指定 context="" 属性来执行此操作。

    另一种选择是让 LiquiBase 仅在 dbms="h2db" 时将此测试数据插入到您的数据库中(忘记选择 h2 的确切字符串是什么,请查看文档!)

    两者都是变更集的属性。

    对于这种情况,这是我自己的首选解决方案。

    【讨论】:

      【解决方案2】:

      Spring Boot 自动配置一个名为 liquibaseSpringLiquibase bean。在 Liquibase 完成后,将创建依赖于该 bean 的任何 bean。例如,您可以使用@PostConstruct 填充数据库:

      @Bean
      @DependsOn("liquibase")
      public YourBean yourBean() {
          return new YourBean();
      }
      
      static class YourBean {
      
          @PostConstruct
          public void populateDatabase() {
              System.out.println("This will be called after Liquibase has finished");
          }
      
      }
      

      【讨论】:

      • 谢谢 :) 漂亮的解决方案
      • 很抱歉对旧问题发表评论。如果YourBeanliquibase 在不同的线程上怎么办?我有相同的用例,这个解决方案对我不起作用。有什么想法吗?
      • 应用程序上下文刷新是单线程的。您是如何陷入两个 bean 并行初始化的情况的?
      • 我正在使用 jhipster。 liquibase bean 在其他线程中初始化。 github.com/jhipster/jhipster/blob/master/jhipster-framework/src/…
      • 正如您链接到的类的 javadoc 所说,如果您想在启动时发出数据库请求,则需要使用标准 SpringLiquibase
      猜你喜欢
      • 1970-01-01
      • 2020-01-27
      • 2021-07-26
      • 2020-09-07
      • 1970-01-01
      • 2015-12-10
      • 1970-01-01
      • 2011-09-07
      相关资源
      最近更新 更多