编辑此页面

Elasticsearch 的 Dev Services

如果存在任何与 Elasticsearch 相关的扩展(例如 quarkus-elasticsearch-rest-clientquarkus-hibernate-search-orm-elasticsearch),Dev Services for Elasticsearch 会在开发模式和测试运行时自动启动 Elasticsearch 服务器。因此,您无需手动启动服务器。应用程序会自动配置。

启用/禁用 Elasticsearch 的 Dev Services

Dev Services for Elasticsearch 默认自动启用,除非

  • quarkus.devservices.enabled 设置为 false

  • quarkus.elasticsearch.devservices.enabled 设置为 false

  • 配置了 hosts 属性,具体取决于使用的扩展,可以是

  • quarkus.elasticsearch.hosts

  • quarkus.hibernate-search-orm.elasticsearch.hosts

Dev Services for Elasticsearch 依赖 Docker 来启动服务器。如果您的环境不支持 Docker,您需要手动启动服务器,或连接到一个已运行的服务器。

共享 Elasticsearch

有时您需要在应用程序之间共享服务器。Dev Services for Elasticsearch 实现了一个服务发现机制,供您在开发模式下运行的多个 Quarkus 应用程序共享单个服务器。

Dev Services for Elasticsearch 使用 quarkus-dev-service-elasticsearch 标签启动容器,用于识别容器。

如果您需要多个(共享)服务器,可以配置 quarkus.elasticsearch.devservices.service-name 属性并指定服务器名称。它会查找具有相同值的容器,如果找不到则启动一个新的。默认服务名称是 elasticsearch

在开发模式下默认启用共享,但在测试模式下禁用。您可以使用 quarkus.elasticsearch.devservices.shared=false 来禁用共享。

设置端口

默认情况下,Dev Services for Elasticsearch 会选择一个随机端口并配置应用程序。您可以通过配置 quarkus.elasticsearch.devservices.port 属性来设置端口。

请注意,Elasticsearch hosts 属性会自动配置所选的端口。

配置镜像

Dev Services for Elasticsearch 支持基于 Elasticsearch 和 OpenSearch 镜像的发行版。

当使用 Hibernate Search 时,Dev Services 将根据 Hibernate Search 的配置默认使用 Elasticsearch 或 OpenSearch。

否则,Dev Services 将默认使用 Elasticsearch。要使用 OpenSearch,请显式配置发行版

quarkus.elasticsearch.devservices.distribution=opensearch

如果您需要使用与默认镜像不同的 Elasticsearch 或 OpenSearch 镜像,可以通过以下方式进行配置

quarkus.elasticsearch.devservices.image-name=docker.io/elastic/elasticsearch:9.0.2

对于不常见的镜像名称,Quarkus 可能无法推断出发行版(elasticopensearch)。在这种情况下,启动 Dev Services 将会失败,您需要显式配置发行版。

quarkus.elasticsearch.devservices.image-name=my-custom-image-with-no-clue-about-the-distribution:1.0
quarkus.elasticsearch.devservices.distribution=elasticsearch

重用 Dev Services

一般情况

在开发模式会话或测试套件执行期间,只要其配置(用户名、密码、环境、端口绑定等)未更改,Quarkus 始终会重用 Elasticsearch Dev Services。

当 Elasticsearch Dev Services 的配置发生更改时,Quarkus 将始终重新启动相应的容器。

当开发模式会话或测试套件执行结束时,Quarkus 会(默认)停止 Elasticsearch Dev Services。

跨执行重用 Dev Service 容器

如果您希望在开发模式会话或测试套件执行结束后保持 Dev Service 容器运行,以便在下一次开发模式会话或测试套件执行中重用它们,这也是可能的。只需通过在您的某个 TestContainers 配置文件(通常是 ~/.testcontainers.propertiesC:/Users/myuser/.testcontainers.properties)中添加此行来启用 TestContainers 重用

testcontainers.reuse.enable=true

即使启用了容器重用,只要启动命令未更改,容器才会重用:相同的环境变量(尤其是用户名/密码)、相同的端口绑定等。

重用容器意味着重用它们的内部状态,包括 Elasticsearch schema 和索引内容。

如果您不希望这样(例如,如果您的测试会写入索引,那么很可能您不希望这样),请考虑在应用程序启动时重新初始化您的 schema 和数据。如果您使用 Hibernate Search,Hibernate Search 的 schema 管理可能会对此有所帮助。

启用容器重用后,旧容器(尤其是配置过时的容器)可能会无限期地运行,即使在启动新的 Quarkus 开发模式会话或测试套件执行后也是如此。

在这种情况下,您需要手动停止并删除这些容器。

如果您想为某些 Quarkus 应用程序重用容器,但不是全部,或者重用某些 Dev Services 但不是全部,您可以通过将配置属性 quarkus.elasticsearch.devservices.reuse 设置为 false 来禁用此功能。

当前限制

目前,仅支持 Hibernate Search Elasticsearch 的默认后端,因为 Dev Services for Elasticsearch 只能启动一个 Elasticsearch 容器。

配置参考

构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖

配置属性

类型

默认

此开发服务是否应在开发模式或测试中随应用程序一起启动。

除非显式设置连接配置(例如,quarkus.elasticsearch.hosts),否则默认情况下会启用开发服务。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_ENABLED

显示更多

布尔值

开发服务将侦听的可选固定端口。

如果未定义,将随机选择端口。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_PORT

显示更多

整数

要使用的 Elasticsearch 发行版。

默认为从显式配置的 image-name(如果有)推断的发行版,或者默认为在依赖扩展(例如 Hibernate Search)中配置的发行版,或者默认为 elastic

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_DISTRIBUTION

显示更多

elastic, opensearch

要使用的 Elasticsearch 容器映像。

默认值取决于配置的 distribution

  • 对于 elastic 发行版:docker.io/elastic/elasticsearch:9.0.2

  • 对于 opensearch 发行版:docker.io/opensearchproject/opensearch:3.0.0

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_IMAGE_NAME

显示更多

字符串

ES_JAVA_OPTS 环境变量的值。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_JAVA_OPTS

显示更多

字符串

-Xms512m -Xmx1g

Quarkus 开发服务管理的 Elasticsearch 服务器是否共享。

共享时,Quarkus 会使用基于标签的服务发现来查找正在运行的容器。 如果找到匹配的容器,则会使用该容器,因此不会启动第二个容器。 否则,Elasticsearch 的开发服务将启动一个新容器。

发现使用 quarkus-dev-service-elasticsearch 标签。 该值使用 service-name 属性配置。

容器共享仅在开发模式下使用。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_SHARED

显示更多

布尔值

true

附加到启动的容器的 quarkus-dev-service-elasticsearch 标签的值。

此属性在 shared 设置为 true 时使用。在这种情况下,在启动容器之前,Dev Services for Elasticsearch 会查找具有设置为配置值的 quarkus-dev-service-elasticsearch 标签的容器。如果找到,它将使用此容器而不是启动新的。否则,它会启动一个具有设置为指定值的 quarkus-dev-service-elasticsearch 标签的新容器。

当您需要多个共享 Elasticsearch 服务器时,将使用此属性。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_SERVICE_NAME

显示更多

字符串

elasticsearch

传递给容器的环境变量。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_CONTAINER_ENV__ENVIRONMENT_VARIABLE_NAME_

显示更多

Map<String,String>

是否在开发模式会话或测试套件执行之后保持开发服务容器运行,以便在下一个开发模式会话或测试套件执行中重用它们。

在开发模式会话或测试套件执行期间,只要其配置(用户名、密码、环境、端口绑定等)未更改,Quarkus 始终会重用 Dev Services。此功能专门用于在Quarkus 未运行时保持容器运行,以便在运行之间重用它们。

此功能需要在 testcontainers.properties 中显式启用,可能需要更改您在开发模式和测试中配置数据初始化的方式,并且可能导致容器无限期运行,迫使您手动停止和删除它们。有关更多信息,请参阅文档的此部分

此配置属性默认设置为 true,因此如果已在 testcontainers.properties 中启用了重用,但只想将其用于某些 Quarkus 应用程序,则它主要用于禁用重用。

环境变量:QUARKUS_ELASTICSEARCH_DEVSERVICES_REUSE

显示更多

布尔值

true

相关内容