【问题标题】:Starting multiple spring boot apps for testing启动多个 Spring Boot 应用程序进行测试
【发布时间】:2019-03-17 16:28:28
【问题描述】:

这里指的是答案

Instantiate multiple spring boot apps in test

测试使用SpringApplicationBuilder 来创建和运行应用程序。例如。

@Test
public void testSomething() {
    SpringApplicationBuilder app1 = new SpringApplicationBuilder(com.app1.Application.class)
      .properties("server.port=8080");

    app1.run();

    SpringApplicationBuilder app2 = new SpringApplicationBuilder(com.app2.Application.class)
      .properties("server.port=8081");

    app2.run();
}

我遇到的问题是尽管我根据上面的属性设置了服务器端口,因为我在 application.yml 中设置了服务器端口,它似乎对两个应用程序都采用了这个设置,因此存在端口冲突。我该如何解决这个问题?

application.yml

server:
    ssl:
        ..stuff..
    port: 8443

【问题讨论】:

标签: spring-boot


【解决方案1】:

不要设置属性...在运行命令中使用命令行参数:

SpringApplicationBuilder app1 = new SpringApplicationBuilder(com.app1.Application.class);

    app1.run("server.port=8080");

SpringApplicationBuilder app2 = new SpringApplicationBuilder(com.app2.Application.class);

    app2.run("server.port=8081");

命令行参数优先于应用程序属性。这样做的结果(当然)是创建的应用程序属性完全相同,但这些将覆盖任何现有相同的属性。

【讨论】:

  • 我担心同样的事情
  • 好的。您在实际应用程序中是否通过快捷方式名称使用​​ yml 属性? IE。 port 而不是 server.port?您必须匹配在应用程序中使用的属性名称。如果不确定,请尝试 port 而不是 server.port
  • 不,肯定是 server: port: 在 yml 中。可能是因为我启用了 SSL 并且 yml 中的端口是 8443?这两个应用程序显然都试图在 8443 上启动
  • 是的,使用 SSL 会使事情复杂化。是否有可能两个应用程序都正确启动,但通过您的 HTTPS 配置被重定向到同一个端口?也许先简化并在没有 SSL 的情况下开始工作,然后让 SSL 工作?
  • 必须是与上下文相关的问题。听起来好像两个应用都在同一个上下文中运行。
猜你喜欢
  • 1970-01-01
  • 2016-07-01
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多