java - liquibase-maven-plugin 与 testcontainers 的使用
问题描述
假设我有这个插件配置(使用 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 代码,它与单元测试无关。
解决方案
您可以通过一个小groovy-maven-plugin
片段使用 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
推荐阅读
- html - 如何删除视差内部滚动条
- node.js - 在 Node.js 方法中共享数据库查询
- java - 替换字符数组中的字符
- javascript - Chart.js AJAX 未捕获类型错误:无法读取未定义的属性“数据”
- android - 在 Android (OpenSSL) 中使用服务器的私钥签署证书
- java - 由于在空对象引用上调用 setText,应用程序崩溃
- ruby-on-rails - Ruby / Rails - 文件命名约定和处理大写模型名称(即 CSV 与 Csv)
- video - VBScript 复制 720p 60fps MP4 文件
- python - 从 JSON Python 中的字典列表中删除重复输出
- python - 如果未从视图 Django REST 框架进行身份验证,则重定向到登录页面