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) {