让其他像我一样配置了他们的应用程序的人从我经历的事情中受益......
上述解决方案均不适合我,因为我的项目库下有一个 ./config 目录,其中包含 2 个文件:
application.properties
application-dev.properties
在application.properties 我有:
spring.profiles.active = dev # set my default profile to 'dev'
在application-dev.properties 我有:
server_host = localhost
server_port = 8080
所以当我从 CLI 运行我的 fat jar 时,*.properties 文件将从 ./config 目录中读取,一切都很好。
好吧,事实证明这些属性文件完全覆盖了我的 Spock 规范中 @SpringBootTest 中的 webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT 设置。无论我尝试什么,即使将webEnvironment 设置为RANDOM_PORT,Spring 总是会在端口 8080 上启动嵌入式 Tomcat 容器(或者我在./config/*.properties 文件中设置的任何值)。
我能够克服这个问题的唯一方法是在我的 Spock 集成规范中将显式 properties = "server_port=0" 添加到 @SpringBootTest 注释:
@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server_port=0")
然后,直到那时,Spring 才最终开始在随机端口上启动 Tomcat。恕我直言,这是一个 Spring 测试框架错误,但我相信他们对此会有自己的看法。
希望这对某人有所帮助。