java 我启动了postregsql测试容器,我希望在其启动后插入数据

epggiuax  于 2023-03-16  发布在  Java
关注(0)|答案(1)|浏览(123)

我有一个postgresql测试容器在我的 Spring 项目旋转,一切正常。

PostgreSQLContainer<?> postgreSQLContainer =
                 new PostgreSQLContainer<>(DockerImageName.parse(POSTGRES_IMAGE))

我有一个脚本,我想在它运行后运行,它必须在之后,因为我在这之前做其他操作。
有没有人知道我怎么运行这个...容器里有什么东西我可以利用,或者我需要创建一个连接,比如JDBC。也许Spring里有什么东西我可以用?
谢谢

wribegjk

wribegjk1#

您可以使用生命周期方法,例如覆盖:

protected void containerIsStarted(InspectContainerResponse containerInfo) {}

可能有助于达到预期效果。
如果您对填充数据库模式、创建表等感兴趣,那么您可能希望使用Postgres Docker图像init目录(Initialization scripts chapter in the docs)并将脚本复制到那里。
所以这样做是可行的:

static PostgreSQLContainer<?> postgreSQLContainer =
    new PostgreSQLContainer<>("postgres:14-alpine")
      .withCopyFileToContainer(MountableFile.forClasspathResource("schema.sql"), 
                              "/docker-entrypoint-initdb.d/");

当容器启动时,以及当容器启动且控制流回到测试中时,将执行模式脚本--模式将在那里。

相关问题