diff --git a/r2dbc/core/src/main/java/com/google/cloud/sql/core/GcpConnectionFactoryProvider.java b/r2dbc/core/src/main/java/com/google/cloud/sql/core/GcpConnectionFactoryProvider.java index 6ebd7be35..b0ca22aaa 100644 --- a/r2dbc/core/src/main/java/com/google/cloud/sql/core/GcpConnectionFactoryProvider.java +++ b/r2dbc/core/src/main/java/com/google/cloud/sql/core/GcpConnectionFactoryProvider.java @@ -124,11 +124,22 @@ public ConnectionFactory create(ConnectionFactoryOptions connectionFactoryOption ? RefreshStrategy.LAZY : RefreshStrategy.BACKGROUND; + final String r2dbcHostname = (String) connectionFactoryOptions.getRequiredValue(HOST); + final String cloudSqlInstance; + final String domainName; + if (CloudSqlInstanceName.isValidInstanceName(r2dbcHostname)) { + cloudSqlInstance = r2dbcHostname; + domainName = null; + } else { + cloudSqlInstance = null; + domainName = r2dbcHostname; + } + Builder optionBuilder = createBuilder(connectionFactoryOptions); - String cloudSqlInstance = (String) connectionFactoryOptions.getRequiredValue(HOST); ConnectionConfig config = new ConnectionConfig.Builder() .withCloudSqlInstance(cloudSqlInstance) + .withDomainName(domainName) .withAuthType(enableIamAuth ? AuthType.IAM : AuthType.PASSWORD) .withIpTypes(ipTypes) .withNamedConnector(namedConnector) diff --git a/r2dbc/core/src/test/java/com/google/cloud/sql/core/GcpConnectionFactoryProviderTest.java b/r2dbc/core/src/test/java/com/google/cloud/sql/core/GcpConnectionFactoryProviderTest.java index b3b63d95f..7975f72d0 100644 --- a/r2dbc/core/src/test/java/com/google/cloud/sql/core/GcpConnectionFactoryProviderTest.java +++ b/r2dbc/core/src/test/java/com/google/cloud/sql/core/GcpConnectionFactoryProviderTest.java @@ -107,6 +107,20 @@ public void testCreateWithAdminApiOptions() { assertThat(config.getConnectorConfig().getAdminServicePath()).isEqualTo("/service"); } + @Test + public void testCreateWithDomainName() { + + ConnectionFactoryOptions.Builder options = ConnectionFactoryOptions.builder(); + options.option(ConnectionFactoryOptions.PROTOCOL, "cloudsql"); + options.option(ConnectionFactoryOptions.HOST, "db.example.com"); + + StubConnectionFactory factory = configureConnection(options.build()); + ConnectionConfig config = factory.config; + + assertThat(config.getDomainName()).isEqualTo("db.example.com"); + assertThat(config.getCloudSqlInstance()).isNull(); + } + private static class StubConnectionFactory implements ConnectionFactory { final ConnectionConfig config;