linux - Linux 中的 Spring Data GemFire 服务器 java.net.BindException
问题描述
我有一个用于启动 Pivotal GemFire 的 Spring Boot 应用程序CacheServer
。
当我打开文件并在本地运行它时:
java -jar gemfire-server-0.0.1-SNAPSHOT.jar
它运行良好,没有问题。服务器正在使用默认属性
spring.data.gemfire.cache.log-level=info
spring.data.gemfire.locators=localhost[10334]
spring.data.gemfire.cache.server.port=40404
spring.data.gemfire.name=CacheServer
spring.data.gemfire.cache.server.bind-address=localhost
spring.data.gemfire.cache.server.host-name-for-clients=localhost
如果我将它部署到 Centos 发行版并使用相同的脚本运行它但通过“测试”配置文件:
java -jar gemfire-server-0.0.1-SNAPSHOT.jar -Dspring.profiles.active=test
我的测试配置文件application-test.properties
如下所示:
spring.data.gemfire.cache.server.host-name-for-clients=server.centralus.cloudapp.azure.com
我可以在启动过程中看到服务器发现 Locator 已经在主机上运行(我通过 Gfsh 的单独进程启动它)。
服务器甚至加入集群大约一分钟。但随后由于绑定异常而关闭。
我检查了该端口(40404)上是否有任何东西在运行 - 没有任何显示
编辑
显然我确实在本地得到了这个异常——只是需要更长的时间。
当我在 Centos 发行版上启动它时,它几乎是即时的。在我的 Mac 上,该过程大约需要 2 分钟才能引发异常:
添加更多的图像:
两个 bash 窗口 - 左边是本地监控 GF,右边是我用来检查端口并启动 Java 进程:
服务器被添加到集群中。请注意 16:45:05 的时间戳。
这是添加的服务器,它似乎正在运行:
最后,大约两分钟后出现异常——再次查看异常上的时间戳——16:47:09。服务器停止并从集群中删除。
解决方案
您是否使用Gfsh启动了其他服务器?也就是说,使用类似于...的 Gfsh 命令
gfsh>start server --name=ExampleGfshServer --log-level=config
Gfsh 将开始CacheServers
侦听.CacheServer
40404
你有几个选择。
1)首先,您可以CacheServer
像这样在使用 Gfsh 启动服务器时禁用默认值...
gfsh>start server --name=ExampleGfshServer --log-level=config --disable-default-server
2) 或者,您可以在CacheServer
使用 Gfsh 启动其他服务器时更改端口...
gfsh>start server --name=ExampleGfshServer --log-level=config --server-port=50505
3) 如果您正在启动 Spring Boot、Pivotal GemFireCacheServer
类的多个实例,那么您可以spring.data.gemfire.cache.server.port
通过在启动时将属性声明为系统属性来更改属性。
例如,您可以在 Spring Bootapplication.properties
中...
#application.properties
...
spring.data.gemfire.cache.server.port=${gemfire.cache.server.port:40404}
然后从命令行启动应用程序时......
java -Dgemfire.cache.server.port=48484 -jar ...
当然,您也可以从命令行设置 SDG 属性...
java -Dspring.data.gemfire.cache.server.port=48484 --jar ...
无论如何,我向您保证,您有另一个进程(例如 Pivotal GemFire CacheServer
)ServerSocket
正在侦听 port 40404
,正在运行。 netstat -a | grep 40404
应该会给你更好的结果。
希望这可以帮助。
问候,约翰
推荐阅读
- arrays - 如何订购数据验证列表
- windows - Windows 加密 API:下一代 (CNG) 是否受益于 Windows Defender Credential Guard?
- json - 如何将一种形式的 json 模式转换为 cerberus 支持的另一种形式?
- c# - 获取N级嵌套列表视图中项目的索引c#UWP
- java - 如何在不读取整个 InputStream 的情况下使 Wiremock 响应?
- c# - 如何从 first 到 end 方法获取所有先前调用的方法
- reactjs - 如何实施第三方脚本以使用提要填充页面?
- html - CSS Flex如何始终将孩子对齐到中心
- python-3.x - 为什么在一个简单的循环中,我使用 python 丢失了 sqlite3 表的 fetchAll 值?
- javascript - 错误:“绑定变量?未设置”...在雪花存储过程中多次绑定参数时,以下是我的存储过程