testcontainers - 在 init 脚本之前在 postgres testcontainer 中创建一个文件夹

标签 testcontainers testcontainers-junit5

我有以下代码:

public static PostgreSQLContainer<?> postgreDBContainer = new PostgreSQLContainer<>("postgres:12")
        .withInitScript("init-database-test.sql")
        .withUsername("dba")
        .withPassword("dba");

在初始化脚本中,我创建了一些表空间并关联文件夹:

CREATE TABLESPACE tsd01 OWNER dba LOCATION '/tsd01';
CREATE TABLESPACE tsi01 OWNER dba LOCATION '/tsi01';
CREATE TABLESPACE tsisecurity01 OWNER dba LOCATION '/tsisecurity01';

这些表空间文件夹应在 init 脚本运行之前创建。我怎样才能做到这一点?

最佳答案

我通过扩展默认的 PostgreSQLContainer 并更改 containerIsStarted 方法解决了这个问题:

public class CustomPostgreSQLContainer<SELF extends CustomPostgreSQLContainer<SELF>> extends PostgreSQLContainer<SELF> {

    private static final Logger log = LoggerFactory.getLogger(CustomPostgreSQLContainer.class);

    public CustomPostgreSQLContainer() {
        super("postgres:12");
    }

    @Override
    protected void containerIsStarted(InspectContainerResponse containerInfo) {
        try {
            log.debug("M=containerIsStarted, creating database namespace folders and setting permissions");
            execInContainer("mkdir", "/tsd01");
            execInContainer("chown", "-R", "postgres.postgres", "/tsd01/");
            execInContainer("mkdir", "/tsi01");
            execInContainer("chown", "-R", "postgres.postgres", "/tsi01/");
            execInContainer("mkdir", "/tsisecurity01");
            execInContainer("chown", "-R", "postgres.postgres", "/tsisecurity01/");
        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
        super.containerIsStarted(containerInfo);
    }
}

关于testcontainers - 在 init 脚本之前在 postgres testcontainer 中创建一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66712387/

相关文章:

docker - 测试容器:在 PATH 上找不到 docker-machine 可执行文件

Micronaut 重用测试容器

java - 如何在使用 JUnit、Spring Boot 和 TestContainers 的集成测试中防止数据冲突?

java - Apache ignite 发现错误的 IP

java - 无法从Java程序解析TestContainers网络别名

java - 无法连接到 PostgreSQLContainer : java. io.EOFException

quarkus - 如何在 Quarkus 中以编程方式覆盖应用程序属性