Apenas para que outras pessoas que configuraram seus aplicativos como o meu se beneficiem do que eu passei ...
Nenhuma das soluções acima funcionou para mim porque tenho um ./config
diretório logo abaixo da base do meu projeto com 2 arquivos:
application.properties
application-dev.properties
Em application.properties
eu tenho:
spring.profiles.active = dev # set my default profile to 'dev'
Em application-dev.properties
eu tenho:
server_host = localhost
server_port = 8080
Isto é, quando eu executo meu jar de gordura a partir da CLI, os *.properties
arquivos serão lidos do ./config
diretório e está tudo bem.
Bem, acontece que esses arquivos de propriedades substituem completamente a webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
configuração @SpringBootTest
em minhas especificações de Spock. Não importa o que eu tentei, mesmo com webEnvironment
definido como RANDOM_PORT
Spring, sempre inicializaria o contêiner Tomcat integrado na porta 8080 (ou qualquer valor que eu definisse em meus ./config/*.properties
arquivos).
A ÚNICA maneira de superar isso foi adicionando um texto explícito properties = "server_port=0"
à @SpringBootTest
anotação em minhas especificações de integração do Spock:
@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server_port=0")
Então, e só então, o Spring finalmente começou a girar o Tomcat em uma porta aleatória. IMHO, este é um bug do framework de testes do Spring, mas tenho certeza que eles terão suas próprias opiniões sobre isso.
Espero que isso tenha ajudado alguém.