आपको पोर्ट इस कोड का उपयोग पा सकते हैं:
int port = context.embeddedServletContainer.port
जो जावा बराबर में रुचि रखने वालों के लिए है:
int port = ((TomcatEmbeddedServletContainer)((AnnotationConfigEmbeddedWebApplicationContext)context).getEmbeddedServletContainer()).getPort();
यहाँ एक अमूर्त वर्ग है कि आप का विस्तार कर सकते हैं जो ऊपर लपेटता है
abstract class SpringBootSpecification extends Specification {
@Shared
@AutoCleanup
ConfigurableApplicationContext context
int port = context.embeddedServletContainer.port
void launch(Class clazz) {
Future future = Executors.newSingleThreadExecutor().submit(
new Callable() {
@Override
public ConfigurableApplicationContext call() throws Exception {
return (ConfigurableApplicationContext) SpringApplication.run(clazz)
}
})
context = future.get(20, TimeUnit.SECONDS);
}
}
: वसंत बूट आवेदन के इस आरंभीकरण और बंदरगाह को निर्धारित करता है
जो तुम इस तरह उपयोग कर सकते हैं:
class MySpecification extends SpringBootSpecification {
void setupSpec() {
launch(MyLauncher.class)
}
String getBody(someParam) {
ResponseEntity entity = new RestTemplate().getForEntity("http://localhost:${port}/somePath/${someParam}", String.class)
return entity.body;
}
}
@SpringApplicationConfiguration स्पॉक 1.0 का उपयोग कर काम कर रहा है। – gilad
एंडी का जवाब असली जवाब के रूप में चिह्नित किया जाना चाहिए था। @Value स्ट्रिंग के साथ पोर्ट # प्राप्त करने का उनका समाधान अधिक सुरुचिपूर्ण है। – Jacomoman
Btw, @ Andy-विल्किनसन, स्पोक्स वसंत अब '@ SpringBootTest' बजाय गठबंधन करने के लिए' @ ContextConfiguration', '@ WebAppConfiguration' होने के एक भी टिप्पणी के रूप में समर्थन करता है, और' @ IntegrationTests'। तो आपको बस इतना करना है: '@SpringBootTest (webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) ' – Jacomoman