无法为 Spring 引导应用程序覆盖 Hazelcast.yaml 中的属性
Cannot override properties in Hazelcast.yaml for Spring Boot Application
我有 Spring 带有 Hazelcast 的启动应用程序(使用 4.2 并尝试使用 4.0.3 的 hazelcast-all 依赖项)。 Hazelcast 是为嵌入式拓扑配置的。我使用 TCP-IP 网络连接方式。 Hazelcast 的属性使用文件 Hazelcast.yaml 和 Spring 设置 Boot 属性: spring.hazelcast.config
(Spring 默认使用这个Hazelcast 配置的名称,它是多余的)。
在属性 member-list
中我指出了一个子网中两台机器的IP地址(例如192.0.0.1和192.0.0.2)。
我在 Docker 中使用基于 OpenJdk 上的 Alpine 的图像构建应用程序。图像包括启动 java -jar
命令作为 ENTRYPOINT
。
问题前提:
我运行两个docker容器在前面描述的两台机器上。我只在两个容器上转发端口 5701(使用 -p
)。容器之间看不到对方。 Spring 启动日志显示正在使用容器网络。
PS:
- 如果 运行 docker 和
--net host
. 所有工作
- 如果我将 Spring 引导应用程序与 属性
public-address
打包到两个容器的 Hazelcast.yaml 中,也所有工作 - 一次打包值为 192.0.0.1,另一个打包值 192.0.0.2。 Spring 启动 Hazelcast 实例使用机器网络(192.0.0.1 和 192.0.0.2)相互查看。
问题:
我尝试在 Hazelcast.yaml 中覆盖 属性 public-address
使用:
docker run -e HZ_NETWORK_PUBLICADDRESS=192.0.0.1
export HZ_NETWORK_PUBLICADDRESS=192.0.0.1 && docker run
JAVA_OPTS="-Dhz.network.public-address=192.0.0.1"
JAVA_OPTS="-Dhazelcast.local.publicAddress=192.0.0.1"
JAVA_OPTS="-Dhazelcast.config=/mnt/overrided_hazelcast.yaml"
ENV HZ_NETWORK_PUBLICADDRESS=192.0.0.1
- 在 Docker 文件中
ENTRYPOINT java -jar -Dhz.network.public-address=192.0.0.1 my-app.jar
没有任何效果。有谁知道为什么无法在启动时覆盖 Hazelcast.yaml 中的 属性 public-address
?
或者也许有人知道我如何 运行 两个 Spring 在不同机器上的单独 Docker 容器中启动带有嵌入式 Hazelcast 的应用程序。
您设置 Hazelcast public 地址的方式是正确的,至少从添加了 Config Override 功能的 Hazelcast 4.1 开始是这样。
要查看工作版本,您可以查看Hazelcast Guide: Embedded Hazelcast on Kubernetes。您可以使用 TCP-IP 代替 Hazelcast Kubernetes 配置。以下 Hazelcast 配置对我有用(我的主机 IP 是 172.22.41.210
)。
hazelcast:
cluster-name: hazelcast-cluster
network:
join:
tcp-ip:
enabled: true
member-list:
- 172.22.41.210:5701
- 172.22.41.210:5702
然后,构建和启动两个应用程序应该形成一个集群。
$ mvn package && docker build -t hazelcast-embedded .
$ docker run --rm -e HZ_NETWORK_PUBLICADDRESS=172.22.41.210 -p 5701:5701 hazelcast-embedded
$ docker run --rm -e HZ_NETWORK_PUBLICADDRESS=172.22.41.210:5702 -p 5702:5701 hazelcast-embedded
您应该会在应用程序日志中看到集群已形成。
Members {size:2, ver:2} [
Member [172.22.41.210]:5701 - 21af9e1a-7e98-4305-905c-451ee23486c3 this
Member [172.22.41.210]:5702 - 0507d970-1f31-4df3-9ea5-8c3981eb7c98
]
我有 Spring 带有 Hazelcast 的启动应用程序(使用 4.2 并尝试使用 4.0.3 的 hazelcast-all 依赖项)。 Hazelcast 是为嵌入式拓扑配置的。我使用 TCP-IP 网络连接方式。 Hazelcast 的属性使用文件 Hazelcast.yaml 和 Spring 设置 Boot 属性: spring.hazelcast.config
(Spring 默认使用这个Hazelcast 配置的名称,它是多余的)。
在属性 member-list
中我指出了一个子网中两台机器的IP地址(例如192.0.0.1和192.0.0.2)。
我在 Docker 中使用基于 OpenJdk 上的 Alpine 的图像构建应用程序。图像包括启动 java -jar
命令作为 ENTRYPOINT
。
问题前提:
我运行两个docker容器在前面描述的两台机器上。我只在两个容器上转发端口 5701(使用 -p
)。容器之间看不到对方。 Spring 启动日志显示正在使用容器网络。
PS:
- 如果 运行 docker 和
--net host
. 所有工作
- 如果我将 Spring 引导应用程序与 属性
public-address
打包到两个容器的 Hazelcast.yaml 中,也所有工作 - 一次打包值为 192.0.0.1,另一个打包值 192.0.0.2。 Spring 启动 Hazelcast 实例使用机器网络(192.0.0.1 和 192.0.0.2)相互查看。
问题:
我尝试在 Hazelcast.yaml 中覆盖 属性 public-address
使用:
docker run -e HZ_NETWORK_PUBLICADDRESS=192.0.0.1
export HZ_NETWORK_PUBLICADDRESS=192.0.0.1 && docker run
JAVA_OPTS="-Dhz.network.public-address=192.0.0.1"
JAVA_OPTS="-Dhazelcast.local.publicAddress=192.0.0.1"
JAVA_OPTS="-Dhazelcast.config=/mnt/overrided_hazelcast.yaml"
ENV HZ_NETWORK_PUBLICADDRESS=192.0.0.1
- 在 Docker 文件中ENTRYPOINT java -jar -Dhz.network.public-address=192.0.0.1 my-app.jar
没有任何效果。有谁知道为什么无法在启动时覆盖 Hazelcast.yaml 中的 属性 public-address
?
或者也许有人知道我如何 运行 两个 Spring 在不同机器上的单独 Docker 容器中启动带有嵌入式 Hazelcast 的应用程序。
您设置 Hazelcast public 地址的方式是正确的,至少从添加了 Config Override 功能的 Hazelcast 4.1 开始是这样。
要查看工作版本,您可以查看Hazelcast Guide: Embedded Hazelcast on Kubernetes。您可以使用 TCP-IP 代替 Hazelcast Kubernetes 配置。以下 Hazelcast 配置对我有用(我的主机 IP 是 172.22.41.210
)。
hazelcast:
cluster-name: hazelcast-cluster
network:
join:
tcp-ip:
enabled: true
member-list:
- 172.22.41.210:5701
- 172.22.41.210:5702
然后,构建和启动两个应用程序应该形成一个集群。
$ mvn package && docker build -t hazelcast-embedded .
$ docker run --rm -e HZ_NETWORK_PUBLICADDRESS=172.22.41.210 -p 5701:5701 hazelcast-embedded
$ docker run --rm -e HZ_NETWORK_PUBLICADDRESS=172.22.41.210:5702 -p 5702:5701 hazelcast-embedded
您应该会在应用程序日志中看到集群已形成。
Members {size:2, ver:2} [
Member [172.22.41.210]:5701 - 21af9e1a-7e98-4305-905c-451ee23486c3 this
Member [172.22.41.210]:5702 - 0507d970-1f31-4df3-9ea5-8c3981eb7c98
]