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();}@DynamicPropertySourcestatic void configureDynamicProperties(DynamicPropertyRegistry registry) {registry.add("payment.gateway.url",() -> "http://" + mockServer.getHost() + ":" + mockServer.getMappedPort(1080));}@Testvoid 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.