Spring + Testcontainers + Jpa + 具有多个用户/模式的 Oracle 数据库

Posted

技术标签:

【中文标题】Spring + Testcontainers + Jpa + 具有多个用户/模式的 Oracle 数据库【英文标题】:Spring + Testcontainers + Jpa + Oracle database with multiple user/schema 【发布时间】:2021-08-04 09:53:35 【问题描述】:

我有一个应用程序正在尝试使用测试容器进行测试。数据库是来自 testcontainers 的 oracle-xe。 属性文件具有属性jpa.hibernate.ddl-auto = true,用于自动发现模式。这里的问题是我有来自多个模式/用户的实体,并且似乎这不适用于 oracle-xe testcontainer(如果我从实体中的@Table 注释中删除 de 属性“模式”,它可以正常工作)。

我使用 schema.sql 文件作为解决方法来加载架构,它工作正常,但我想在没有这个文件的情况下实现同样的效果。 有谁知道为什么会发生这种行为以及如何解决它?

【问题讨论】:

【参考方案1】:

您可以创建自己的 Oracle XE Docker 映像,在其中创建各种模式,然后将此映像与 TestContainers 一起使用。

【讨论】:

这不适合我,因为我必须使用特定的 docker 映像并且它没有架构。 因此您可以创建基于该图像的新图像。这就是在 Docker 中分层的目的【参考方案2】:

如果这仍然是个问题...这是我的 2 美分。

userschema 有区别吗? 如果是这样,您可能必须手动为模式创建用户(提示...创建用户会为给定的用户名创建模式)。 来自 Oracle 关于CREATE SCHEMA的官方文档

注意:

此语句实际上并未创建架构。甲骨文数据库 创建用户时自动创建架构(请参阅 CREATE 用户)。此语句允许您使用表和 无需发布即可查看并授予这些对象的权限 多个事务中的多个 SQL 语句。

此外,您可能需要一些额外的 GRANT 等,以确保连接到数据库的用户和与架构相关的用户拥有足够的权限。

例子:

CREATE USER <USERNAME> IDENTIFIED BY <password>;
GRANT UNLIMITED TABLESPACE TO <USERNAME>;
GRANT CREATE SESSIONT TO <USERNAME>;
GRANT CONNECT, RESOURCE, DBA TO <USERNAME>;

仅供参考...我是,也没有声称自己是,绝不是 Oracle 数据库专家。因此,请与您的 DBA 确认;)


关于 testcontainer 的 oracle DB 映像的额外信息

在类似情况下,我使用 this 博客的部分内容创建了一个没有数据卷的 oracle-image。这允许数据库的初始化状态。

【讨论】:

以上是关于Spring + Testcontainers + Jpa + 具有多个用户/模式的 Oracle 数据库的主要内容,如果未能解决你的问题,请参考以下文章

Spring + Testcontainers + Jpa + 具有多个用户/模式的 Oracle 数据库

如何解决 Spring Boot 上的 org.testcontainers.containers.ContainerFetchException?

如何使用 testcontainers 和 spring-kafka 准备测试

在 SpringBoot 中使用 Testcontainers 进行 Spring Data Elasticsearch 集成测试

是否可以在 Spring(非 Boot)上使用 Testcontainers?

Spring boot、ElasticSearch 和 TestContainers 集成测试。拒绝连接