Elasticsearch 的 Dev Services
如果存在任何与 Elasticsearch 相关的扩展(例如 quarkus-elasticsearch-rest-client
或 quarkus-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 可能无法推断出发行版(elastic
或 opensearch
)。在这种情况下,启动 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.properties
或 C:/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 容器。
配置参考
构建时固定的配置属性 - 所有其他配置属性都可以在运行时覆盖
配置属性 |
类型 |
默认 |
||
---|---|---|---|---|
此开发服务是否应在开发模式或测试中随应用程序一起启动。 除非显式设置连接配置(例如, 环境变量: 显示更多 |
布尔值 |
|||
开发服务将侦听的可选固定端口。 如果未定义,将随机选择端口。 环境变量: 显示更多 |
整数 |
|||
要使用的 Elasticsearch 发行版。 默认为从显式配置的 环境变量: 显示更多 |
|
|||
要使用的 Elasticsearch 容器映像。 默认值取决于配置的
环境变量: 显示更多 |
字符串 |
|||
ES_JAVA_OPTS 环境变量的值。 环境变量: 显示更多 |
字符串 |
|
||
Quarkus 开发服务管理的 Elasticsearch 服务器是否共享。 共享时,Quarkus 会使用基于标签的服务发现来查找正在运行的容器。 如果找到匹配的容器,则会使用该容器,因此不会启动第二个容器。 否则,Elasticsearch 的开发服务将启动一个新容器。 发现使用 容器共享仅在开发模式下使用。 环境变量: 显示更多 |
布尔值 |
|
||
附加到启动的容器的 此属性在 当您需要多个共享 Elasticsearch 服务器时,将使用此属性。 环境变量: 显示更多 |
字符串 |
|
||
传递给容器的环境变量。 环境变量: 显示更多 |
Map<String,String> |
|||
是否在开发模式会话或测试套件执行之后保持开发服务容器运行,以便在下一个开发模式会话或测试套件执行中重用它们。 在开发模式会话或测试套件执行期间,只要其配置(用户名、密码、环境、端口绑定等)未更改,Quarkus 始终会重用 Dev Services。此功能专门用于在Quarkus 未运行时保持容器运行,以便在运行之间重用它们。
此配置属性默认设置为 环境变量: 显示更多 |
布尔值 |
|