Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法覆盖Spring启动应用程序的Hazelcast.yaml中的属性_Java_Spring Boot_Docker_Containers_Hazelcast - Fatal编程技术网

Java 无法覆盖Spring启动应用程序的Hazelcast.yaml中的属性

Java 无法覆盖Spring启动应用程序的Hazelcast.yaml中的属性,java,spring-boot,docker,containers,hazelcast,Java,Spring Boot,Docker,Containers,Hazelcast,我有一个带有Hazelcast的Spring启动应用程序(使用4.2,并尝试使用Hazelcast所有依赖项的4.0.3)。Hazelcast配置为嵌入式拓扑。我使用TCP-IP网络连接方式。Hazelcast的属性是使用文件Hazelcast.yaml和Spring启动属性:Spring.Hazelcast.config(Spring默认情况下对Hazelcast配置使用此名称,它是冗余的) 在属性成员列表中I表示一个子网中两台机器的IP地址(例如192.0.0.1和192.0.0.2) 我在

我有一个带有Hazelcast的Spring启动应用程序(使用4.2,并尝试使用Hazelcast所有依赖项的4.0.3)。Hazelcast配置为嵌入式拓扑。我使用TCP-IP网络连接方式。Hazelcast的属性是使用文件Hazelcast.yaml和Spring启动属性:
Spring.Hazelcast.config
(Spring默认情况下对Hazelcast配置使用此名称,它是冗余的)

在属性
成员列表中
I表示一个子网中两台机器的IP地址(例如192.0.0.1和192.0.0.2)

我在Docker中使用基于OpenJdk的Alpine图像构建应用程序。图像包括start
java-jar
命令作为
ENTRYPOINT

问题前提:

我在前面描述的两台机器上运行了两个docker容器。我只转发两个集装箱上的端口5701(使用
-p
)。而容器彼此看不见。Spring引导日志显示正在使用容器网络

PS:

  • 如果使用
    --net host
    运行docker,则所有工作正常
  • 如果我在Hazelcast.yaml中用属性
    public address
    为两个容器打包Spring Boot应用程序,那么所有这些都可以工作——一个包的值为192.0.0.1,另一个包的值为192.0.0.2。Spring Boot Hazelcast实例使用机器网络(192.0.0.1和192.0.0.2)相互查看
  • 问题:

    我尝试使用以下命令覆盖Hazelcast.yaml中的属性
    公共地址

    • docker run-e HZ\u NETWORK\u PUBLICADDRESS=192.0.0.1
    • export-HZ\u-NETWORK\u-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\u NETWORK\u PUBLICADDRESS=192.0.0.1
      -在Dockerfile中
    • entrypointjava-jar-Dhz.network.public address=192.0.0.1 my app.jar
    什么都不管用。有人知道为什么不能在启动时覆盖Hazelcast.yaml中的属性
    公共地址


    或者,也许有人知道我如何在不同的机器上的不同Docker容器中运行两个带有嵌入式Hazelcast的Spring Boot应用程序。

    设置Hazelcast公共广播的方式是正确的,至少从添加该功能的Hazelcast 4.1开始

    要检查工作版本,您可以查看。您可以使用TCP-IP代替Hazelcast Kubernetes配置。以下Hazelcast配置适用于我(我的主机IP为
    172.22.41.210

    然后,构建和启动两个应用程序应该形成一个集群

    $ 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     
    ]
    

    非常感谢。我的错误是我没有尝试用4.1版的Hazelcast重写属性
    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     
    ]