From d4dce64bf3634290df02a0160b1a471b20d3057e Mon Sep 17 00:00:00 2001 From: Rajkaran Yadav Date: Sat, 15 Aug 2026 13:31:51 +0530 Subject: [PATCH] Add getR2dbcUrl helper method to JdbcDatabaseContainer Adds a convenience method to generate R2DBC connection strings from JDBC URLs, similar to the existing getJdbcUrl() method. This makes integration with R2DBC drivers more seamless. Fixes #8797 --- .../containers/JdbcDatabaseContainer.java | 9 +++++++++ .../containers/JdbcDatabaseContainerTest.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java b/modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java index cf6c995528f..ec297a0ef41 100644 --- a/modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java +++ b/modules/jdbc/src/main/java/org/testcontainers/containers/JdbcDatabaseContainer.java @@ -76,6 +76,15 @@ public JdbcDatabaseContainer(final DockerImageName dockerImageName) { */ public abstract String getJdbcUrl(); + /** + * @return an R2DBC URL that may be used to connect to the dockerized DB + */ + public String getR2dbcUrl() { + String jdbcUrl = getJdbcUrl(); + // Convert JDBC URL to R2DBC URL by replacing jdbc: with r2dbc: + return jdbcUrl.replaceFirst("^jdbc:", "r2dbc:"); + } + /** * @return the database name */ diff --git a/modules/jdbc/src/test/java/org/testcontainers/containers/JdbcDatabaseContainerTest.java b/modules/jdbc/src/test/java/org/testcontainers/containers/JdbcDatabaseContainerTest.java index ca41c3f5d1c..45c6bd83395 100644 --- a/modules/jdbc/src/test/java/org/testcontainers/containers/JdbcDatabaseContainerTest.java +++ b/modules/jdbc/src/test/java/org/testcontainers/containers/JdbcDatabaseContainerTest.java @@ -7,6 +7,7 @@ import java.sql.Connection; import java.sql.SQLException; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; import static org.mockito.Mockito.mock; @@ -20,6 +21,20 @@ void anExceptionIsThrownIfJdbcIsNotAvailable() { assertThatExceptionOfType(IllegalStateException.class).isThrownBy(jdbcContainer::waitUntilContainerStarted); } + @Test + void getR2dbcUrlConvertsJdbcUrlToR2dbcUrl() { + JdbcDatabaseContainerStub jdbcContainer = new JdbcDatabaseContainerStub("mysql:latest") { + @Override + public String getJdbcUrl() { + return "jdbc:mysql://localhost:3306/test"; + } + }; + + String r2dbcUrl = jdbcContainer.getR2dbcUrl(); + + assertThat(r2dbcUrl).isEqualTo("r2dbc:mysql://localhost:3306/test"); + } + static class JdbcDatabaseContainerStub extends JdbcDatabaseContainer { public JdbcDatabaseContainerStub(@NonNull String dockerImageName) {