Proprio così altri che hanno configurato le loro app come la mia traggono beneficio da quello che ho passato ...
Nessuna delle soluzioni di cui sopra ha funzionato per me perché ho una directory ./config
appena sotto la mia base di progetto con 2 file:
application.properties
application-dev.properties
In application.properties
ho:
spring.profiles.active = dev # set my default profile to 'dev'
In application-dev.properties
Ho:
server_host = localhost
server_port = 8080
Questo è così quando eseguo il mio contenitore di grassi dalla CLI i file *.properties
verranno letti dalla directory ./config
e tutto va bene.
Bene, si scopre che questi file di proprietà sovrascrivono completamente l'impostazione webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
in @SpringBootTest
nelle specifiche di Spock. Indipendentemente da ciò che ho provato, anche con webEnvironment
impostato su RANDOM_PORT
Spring avviava sempre il contenitore Tomcat incorporato sulla porta 8080 (o qualunque valore avessi impostato nei miei file ./config/*.properties
).
Il SOLO modo in cui mi è stato in grado di superare questo è stato con l'aggiunta di un esplicito properties = "server_port=0"
alla @SpringBootTest
annotazioni nei miei Spock specifiche di integrazione:
@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, properties = "server_port=0")
Allora, e solo allora primavera finalmente iniziare a girare in su Tomcat su una porta casuale. IMHO questo è un bug del framework Spring testing, ma sono sicuro che avranno la loro opinione su questo.
Spero che questo abbia aiutato qualcuno.
Correlato: http://stackoverflow.com/a/24643484/1686330 –
Un'altra possibilità può essere trovata nei documenti: http://docs.spring.io/spring-boot/docs/current/reference/html/ howto-embedded-servlet-containers.html (vedi 64.5 Scopri la porta HTTP in fase di esecuzione) –
Grazie, ma ho letto quei siti ma non mi danno la risposta - o non funzionano, sembrano troppo complicata per essere la migliore risposta o non è applicabile. Non sto facendo test unitari. Voglio semplicemente ottenere la porta che il server è stato avviato in modo programmatico. questo dovrebbe essere facile, ma non riesco a trovare la risposta :( – Tucker