0 Tage Serie
java / intermediate
Snippet

Konfigurieren dynamischer Umgebungseigenschaften in Spring Boot Integrationstests

Beim Ausführen von Integrationstests gegen externe Testinfrastrukturen wie dynamische Container sind Zielports und Hostnamen vorab nicht bekannt. Die Annotation `@DynamicPropertySource` ermöglicht es Entwicklern, dem Spring-`Environment` über funktionale `Supplier`-Instanzen dynamische Konfigurationswerte bereitzustellen. Dieser Mechanismus wird vor dem Aktualisieren des ApplicationContext ausgeführt, wodurch sichergestellt wird, dass nachgelagerte Beans dynamisch ermittelte Verbindungsdaten ohne fest codierte Eigenschaften erhalten.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class PaymentGatewayIntegrationTest {
static final GenericContainer<?> mockServer =
new GenericContainer<>("mockserver/mockserver:latest")
.withExposedPorts(1080);
static {
mockServer.start();
}
@DynamicPropertySource
static void configureDynamicProperties(DynamicPropertyRegistry registry) {
registry.add("payment.gateway.url",
() -> "http://" + mockServer.getHost() + ":" + mockServer.getMappedPort(1080));
}
@Test
void shouldProcessPaymentAgainstDynamicEndpoint() {
// Test execution against the dynamic endpoint
}
}
spring
Erklärung
1
@DynamicPropertySource
Registriert eine statische Methode, die vor dem Kontextstart dynamische Eigenschaften in das Spring-Environment einfügt.
2
static void configureDynamicProperties(DynamicPropertyRegistry registry)
Statischer Callback, der die Registry empfängt, an die Name-zu-Supplier-Schlüssel-Wert-Paare gebunden werden.
3
registry.add("payment.gateway.url", () -> "http://" + mockServer.getHost() + ":" + mockServer.getMappedPort(1080));
Wertet Host und zufällig gemappten Port des Containers verzögert aus und injiziert diese als Laufzeiteigenschaft.