首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >弹簧云端口号,使选择智能化

弹簧云端口号,使选择智能化
EN

Stack Overflow用户
提问于 2017-10-15 06:31:18
回答 2查看 1.5K关注 0票数 1

我正在使用Eureka服务器运行Spring,我想让我的应用程序根据已使用的端口和给定的范围选择一个端口。

例如,我希望我的第一个实例在端口8010启动,第二个在8011启动,等等。

在application.properties中,您可以设置一个随机端口(server.port=0),您可以设置一个静态端口(server.port=8080),但是我想知道如何使spring在一个范围内设置一个随机端口,或者如何根据使用的端口来选择一个端口。

例如,像这样的东西会起作用:

代码语言:javascript
复制
server.port.random=8080-8090

但这显然不存在。

我还知道可以添加一些逻辑,例如,我使用了:

代码语言:javascript
复制
eureka.instance.instance-id=${spring.application.name}:${random.int}

但我不知道怎样才能在两个数字之间随机工作。另外,随机设置相同端口两次的可能性仍然存在,这使得服务器无法启动实例。

是否有一种在Springapplication.properties中动态设置端口的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-15 07:46:43

可以在给定范围内指定随机端口。在你的属性文件中。

server.port=${random.int[8080,8090]}

仍然有可能发生碰撞,但如果你有足够的填充范围,你可以限制发生这种情况的可能性。

然而,更可取的方法是将端口指定为环境变量。

java -jar app.jar --SERVER_PORT=8080

java -jar app.jar --SERVER_PORT=8081

票数 7
EN

Stack Overflow用户

发布于 2017-10-16 09:24:11

如果使用server.port=${random.int[8080,8090]}确定端口号,则可能会遇到这个号码已经在使用的问题。

另一种选择是通过程序随机指定端口号,它将始终根据指定的范围返回可用的数字。

例如:

application.properties

代码语言:javascript
复制
port.number.min=8080
port.number.max=8090

主类中的部分代码

代码语言:javascript
复制
@Value("${port.number.min:8080}")
private Integer minPortNum = 8080;

@Value("${port.number.max:8090}")
private Integer maxPortNum = 8090;

@Bean
public EmbeddedServletContainerCustomizer containerCustomizer() {
    return new EmbeddedServletContainerCustomizer() {
        @Override
        public void customize(ConfigurableEmbeddedServletContainer container) {             
            int port = SocketUtils.findAvailableTcpPort(minPortNum, maxPortNum);                
            container.setPort(port);
            System.getProperties().put("server.port", port);
        }
    };
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46752350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档