liquibase-maven-plugin 与 testcontainers 的使用

     2023-03-28     220

关键词:

【中文标题】liquibase-maven-plugin 与 testcontainers 的使用【英文标题】:The usage of liquibase-maven-plugin with testcontainers 【发布时间】:2021-12-01 00:44:29 【问题描述】:

假设我有这个插件配置(使用 hsqldb):

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>3.4.1</version>
    <executions>
        <execution>
            <id>build</id>
            <phase>generate-test-resources</phase>
            <goals>
                <goal>update</goal>
            </goals>
            <configuration>
                <changeLogFile>$basedir/src/main/resources/liquibase/db.changelog-master.xml
                </changeLogFile>
                <driver>org.hsqldb.jdbc.JDBCDriver</driver>
                <url>jdbc:hsqldb:file:$project.build.directory/hsqldb/sample;shutdown=true</url>
                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                <logging>off</logging>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.hsqldb</groupId>
            <artifactId>hsqldb</artifactId>
            <version>2.5.2</version>
        </dependency>
    </dependencies>
</plugin>

我想将 hsqldb 更改为 postgres。我想这里可以使用testcontainers。但我无法正确设置。

如果可能的话,有人可以提供示例配置吗?或者也许还有其他解决方案?

注意:我目前在另一个插件(schemacrawler)中使用这个数据库,所以没有使用 java 代码,它与单元测试无关。

【问题讨论】:

看看the-codeslinger.com/2020/04/26/… - 它使用Flyway,但你应该能够使用Liquibase和SchemaCrawler @SualehFatehi 谢谢!我已经用 groovy 插件 + testcontainers 实现了它,但同样应该也可以工作docker-maven-plugin。我会在业余时间尝试这个插件。 【参考方案1】:

你可以通过一个小的groovy-maven-pluginsn-p来使用Testcontainers,例如,下面会启动一个Postgres容器:

<plugin>
  <groupId>org.codehaus.gmaven</groupId>
  <artifactId>groovy-maven-plugin</artifactId>
  <version>2.1.1</version>
  <executions>
    <execution>
      <!-- Start the container in any phase before the actual code
           generation is required, i.e. at the latest in
           generate-sources -->
      <phase>generate-sources</phase>
      <goals>
        <goal>execute</goal>
      </goals>
      <configuration>
        <source>
          db = new org.testcontainers.containers.PostgreSQLContainer(
                  "postgres:latest")
            .withUsername("$db.username")
            .withDatabaseName("postgres")
            .withPassword("$db.password");
             
          db.start();
 
          // After you've started the container, collect its generated
          // JDBC URL (which contains a random port)
          project.properties.setProperty('db.url', db.getJdbcUrl());
        </source>
      </configuration>
    </execution>
  </executions>
   
  <dependencies>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>postgresql</artifactId>
    </dependency>
  </dependencies>
</plugin>

此示例缺少正常关闭。它也来自 jOOQ 文章,关于如何使用 Testcontainers 从数据库模式生成 Java 类:https://blog.jooq.org/using-testcontainers-to-generate-jooq-code

【讨论】:

谢谢,成功了。另外,testcontainers 的好处是创建的容器会被 ryuk 自动删除,所以在这种情况下你不需要执行额外的操作

Liquibase:diff 总是生成索引

...时间】:2018-02-1115:19:03【问题描述】:我使用spring-boot和liquibase-maven-plugin来根据我的类生成数据库更改,但是“mvncompileliquibase:diff”命令总是生成索引和外键的删除和包含,即使数据库已更新并且类没有变化(因此数据库中应该... 查看详情

Liquibase maven插件不起作用

...出现以下错误:无法在项目liquibase上执行目标org.liquibase:liquibase-maven-plugin:3.4.1:update(默认):设置或运行Liq 查看详情

Liquibase 看不到实体的变化

...正在尝试使用liquibase配置简单的maven项目。我有很多关于liquibase-maven-plugin和liquibase-hibernate4版本的问题,它们不会产生大的堆栈跟踪,但最后我几乎让它工作了。但是当我执行mvnliquibase:d 查看详情

找不到数据库驱动程序:org.postgresql.Driver

...目来稍微改变项目。它是一个JavaEE项目。所以我使用的是liquibase-maven-plugin。到目前为止,我的pom.xml中有:<plugin& 查看详情

三.工具与市场-债券与债务股票与公司

    查看详情

LDAP 与 MYSQL .. JA-SIG CAS 与 LDAP 与 CAS 与 MySQL

】LDAP与MYSQL..JA-SIGCAS与LDAP与CAS与MySQL【英文标题】:LDAPvsMYSQL..JA-SIGCASwithLDAPvsCASwithMySQL【发布时间】:2012-12-0518:12:59【问题描述】:LDAP与MYSQL..JA-SIGCAS与LDAP与CAS与MySQL。现在我们在LDAP中有用户ID、密码和角色,并且正在使用CAS和Spr... 查看详情

LocalAlloc 与 GlobalAlloc 与 malloc 与 new

】LocalAlloc与GlobalAlloc与malloc与new【英文标题】:LocalAllocVsGlobalAllocVsmallocVsnew【发布时间】:2016-03-2311:07:46【问题描述】:我已经在各种链接上搜索过这个,但仍然存在疑问。我不明白LocalAllocvsGlobalAllocvsmallocvsnew内存分配的区别。... 查看详情

与 0 进行比较与与某个值进行比较是不是更快?

】与0进行比较与与某个值进行比较是不是更快?【英文标题】:Isitquickertocompareagainst0vscompareagainstavalue?与0进行比较与与某个值进行比较是否更快?【发布时间】:2019-07-1216:46:58【问题描述】:其中一个循环是否比另一个更快?... 查看详情

调整大小与 CenterCrop 与 RandomResizedCrop 与 RandomCrop

】调整大小与CenterCrop与RandomResizedCrop与RandomCrop【英文标题】:ResizeVsCenterCropVsRandomResizedCropVsRandomCrop【发布时间】:2020-08-0301:47:51【问题描述】:谁能告诉我上述函数在哪些情况下使用以及它们如何影响图像大小?我想调整CatVDog... 查看详情

=与==&与&&|与||的区别

=与===属于赋值运算符,将右侧的值赋给左侧的变量名称==属于关系运算符,判断左右两边值是否相等,结果为boolean类型&与&&&是逻辑与,&&是短路与,都属于逻辑运算符,都表示并且,执行结果都相同当使用短... 查看详情

restfulrest与restful理解与实践(代码片段)

REST与RESTful介绍与理解文章目录REST与RESTful介绍与理解一.REST与RESTful简介二.REST架构原则三.传统API与RESTfulAPI对比四.RESTfulAPI实践相关文献一.REST与RESTful简介REST全称表述性状态转移(RepresentationalStateTransfer)。是RoyFielding博... 查看详情

reduceByKey 与 groupByKey 与 aggregateByKey 与 combineByKey 之间的火花差异

】reduceByKey与groupByKey与aggregateByKey与combineByKey之间的火花差异【英文标题】:SparkdifferencebetweenreduceByKeyvs.groupByKeyvs.aggregateByKeyvs.combineByKey【发布时间】:2017-09-0722:23:31【问题描述】:谁能解释reducebykey、groupbykey、aggregatebykey和com 查看详情

jquery与javascript与ajax三者的区别与联系

...Ajax是一门技术,它提供了异步更新的机制,使用客户端与服务器间交换数据而非整个页面文档,实现页面的局部更新。3、jQuery是一个框架,它对JS进行了封装,使其更方便使用。jQuery使得JS与Ajax的使用更方便 关系比喻:若... 查看详情

c++map与set的介绍与使用(代码片段)

等风来,不如追风去。map与setset与multisetset与multiset的介绍set与multiset的定义方式set与multiset常用操作迭代器map与multimapmap与multimap的介绍set与multisetset与multiset的介绍set是STL中一种标准关联容器。它底层使用平衡的搜索树——红... 查看详情

css盒模型与bfc与布局与垂直水平居中与css设计模式等

一、css盒子与布局相关盒子内部的布局盒子之间的布局visualformatting脱离正常流normalflow的盒子的布局absolute布局上下文下的布局float布局上下文下的布局flow下的盒子的布局BFC布局上下文下的布局IFC布局上下文下的布局FFC布局上下... 查看详情

为何与0xff进行与运算

为何与0xff进行与运算为何与0xff进行与运算在剖析该问题前请看如下代码publicstaticStringbytes2HexString(byte[]b) Stringret=""; for(inti=0;i<b.length;i++)  Stringhex=Integer.toHexString(b[i]&0xFF); &n 查看详情

同步与异步,阻塞与非阻塞

...请联系作者获得授权,非商业转载请注明出处。“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制(synchronouscommunication/asy 查看详情

同步与异步阻塞与非阻塞

“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。1.同步与异步同步和异步关注的是消息通信机制(synchronouscommunication/asynchronouscommunication)所谓同步,就是在发出一个*调用*时,在... 查看详情