Move JDBC Docker Compose support into spring-boot-jdbc
This commit is contained in:
@@ -1,69 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.clickhouse;
|
||||
|
||||
import java.sql.Driver;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.DatabaseDriver;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link ClickHouseJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
class ClickHouseJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@DockerComposeTest(composeFile = "clickhouse-compose.yaml", image = TestImage.CLICKHOUSE)
|
||||
void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "clickhouse-bitnami-compose.yaml", image = TestImage.BITNAMI_CLICKHOUSE)
|
||||
void runWithBitnamiImageCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
// See https://github.com/bitnami/containers/issues/73550
|
||||
// checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
private void assertConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:clickhouse://").endsWith("/mydatabase");
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void checkDatabaseAccess(JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
|
||||
dataSource.setUrl(connectionDetails.getJdbcUrl());
|
||||
dataSource.setUsername(connectionDetails.getUsername());
|
||||
dataSource.setPassword(connectionDetails.getPassword());
|
||||
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
|
||||
getClass().getClassLoader()));
|
||||
JdbcTemplate template = new JdbcTemplate(dataSource);
|
||||
assertThat(template.queryForObject(DatabaseDriver.CLICKHOUSE.getValidationQuery(), Integer.class)).isEqualTo(1);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.mariadb;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link MariaDbJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class MariaDbJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@DockerComposeTest(composeFile = "mariadb-compose.yaml", image = TestImage.MARIADB)
|
||||
void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "mariadb-bitnami-compose.yaml", image = TestImage.BITNAMI_MARIADB)
|
||||
void runWithBitnamiImageCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
}
|
||||
|
||||
private void assertConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:mariadb://").endsWith("/mydatabase");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,51 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.mysql;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link MySqlJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class MySqlJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@DockerComposeTest(composeFile = "mysql-compose.yaml", image = TestImage.MYSQL)
|
||||
void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "mysql-bitnami-compose.yaml", image = TestImage.BITNAMI_MYSQL)
|
||||
void runWithBitnamiImageCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
}
|
||||
|
||||
private void assertConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:mysql://").endsWith("/mydatabase");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,61 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.oracle;
|
||||
|
||||
import java.sql.Driver;
|
||||
import java.time.Duration;
|
||||
|
||||
import org.awaitility.Awaitility;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.DatabaseDriver;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link OracleFreeJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
class OracleFreeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@DockerComposeTest(composeFile = "oracle-compose.yaml", image = TestImage.ORACLE_FREE)
|
||||
void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(JdbcConnectionDetails connectionDetails)
|
||||
throws Exception {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("app_user");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("app_user_secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/freepdb1");
|
||||
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
|
||||
dataSource.setUrl(connectionDetails.getJdbcUrl());
|
||||
dataSource.setUsername(connectionDetails.getUsername());
|
||||
dataSource.setPassword(connectionDetails.getPassword());
|
||||
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
|
||||
getClass().getClassLoader()));
|
||||
Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> {
|
||||
JdbcTemplate template = new JdbcTemplate(dataSource);
|
||||
assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class))
|
||||
.isEqualTo("Hello");
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,65 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.oracle;
|
||||
|
||||
import java.sql.Driver;
|
||||
import java.time.Duration;
|
||||
|
||||
import org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.condition.OS;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.DatabaseDriver;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
import org.springframework.boot.testsupport.junit.DisabledOnOs;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link OracleXeJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64",
|
||||
disabledReason = "The Oracle image has no ARM support")
|
||||
class OracleXeJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@DockerComposeTest(composeFile = "oracle-compose.yaml", image = TestImage.ORACLE_XE)
|
||||
void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(JdbcConnectionDetails connectionDetails)
|
||||
throws Exception {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("app_user");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("app_user_secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:oracle:thin:@").endsWith("/xepdb1");
|
||||
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
|
||||
dataSource.setUrl(connectionDetails.getJdbcUrl());
|
||||
dataSource.setUsername(connectionDetails.getUsername());
|
||||
dataSource.setPassword(connectionDetails.getPassword());
|
||||
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
|
||||
getClass().getClassLoader()));
|
||||
Awaitility.await().atMost(Duration.ofMinutes(1)).ignoreExceptions().untilAsserted(() -> {
|
||||
JdbcTemplate template = new JdbcTemplate(dataSource);
|
||||
assertThat(template.queryForObject(DatabaseDriver.ORACLE.getValidationQuery(), String.class))
|
||||
.isEqualTo("Hello");
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,98 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.postgres;
|
||||
|
||||
import java.sql.Driver;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.DatabaseDriver;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link PostgresJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
* @author He Zean
|
||||
*/
|
||||
class PostgresJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@DockerComposeTest(composeFile = "postgres-compose.yaml", image = TestImage.POSTGRESQL)
|
||||
void runCreatesConnectionDetails(JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "postgres-with-trust-host-auth-method-compose.yaml", image = TestImage.POSTGRESQL)
|
||||
void runCreatesConnectionDetailsThatCanAccessDatabaseWhenHostAuthMethodIsTrust(
|
||||
JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
|
||||
assertThat(connectionDetails.getPassword()).isNull();
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://").endsWith("/mydatabase");
|
||||
checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "postgres-bitnami-compose.yaml", image = TestImage.BITNAMI_POSTGRESQL)
|
||||
void runWithBitnamiImageCreatesConnectionDetails(JdbcConnectionDetails connectionDetails)
|
||||
throws ClassNotFoundException {
|
||||
assertConnectionDetails(connectionDetails);
|
||||
checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "postgres-application-name-compose.yaml", image = TestImage.POSTGRESQL)
|
||||
void runCreatesConnectionDetailsApplicationName(JdbcConnectionDetails connectionDetails)
|
||||
throws ClassNotFoundException {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://")
|
||||
.endsWith("?ApplicationName=spring+boot");
|
||||
assertThat(executeQuery(connectionDetails, "select current_setting('application_name')", String.class))
|
||||
.isEqualTo("spring boot");
|
||||
}
|
||||
|
||||
private void assertConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("myuser");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("secret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://").endsWith("/mydatabase");
|
||||
}
|
||||
|
||||
private void checkDatabaseAccess(JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
assertThat(executeQuery(connectionDetails, DatabaseDriver.POSTGRESQL.getValidationQuery(), Integer.class))
|
||||
.isEqualTo(1);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private <T> T executeQuery(JdbcConnectionDetails connectionDetails, String sql, Class<T> resultClass)
|
||||
throws ClassNotFoundException {
|
||||
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
|
||||
dataSource.setUrl(connectionDetails.getJdbcUrl());
|
||||
dataSource.setUsername(connectionDetails.getUsername());
|
||||
dataSource.setPassword(connectionDetails.getPassword());
|
||||
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
|
||||
getClass().getClassLoader()));
|
||||
return new JdbcTemplate(dataSource).queryForObject(sql, resultClass);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,74 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver;
|
||||
|
||||
import java.sql.Driver;
|
||||
|
||||
import org.junit.jupiter.api.condition.OS;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.test.DockerComposeTest;
|
||||
import org.springframework.boot.jdbc.DatabaseDriver;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.boot.testsupport.container.TestImage;
|
||||
import org.springframework.boot.testsupport.junit.DisabledOnOs;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
import org.springframework.jdbc.datasource.SimpleDriverDataSource;
|
||||
import org.springframework.util.ClassUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Integration tests for {@link SqlServerJdbcDockerComposeConnectionDetailsFactory}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
@DisabledOnOs(os = { OS.LINUX, OS.MAC }, architecture = "aarch64",
|
||||
disabledReason = "The SQL server image has no ARM support")
|
||||
class SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@DockerComposeTest(composeFile = "mssqlserver-compose.yaml", image = TestImage.SQL_SERVER)
|
||||
void runCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(JdbcConnectionDetails connectionDetails)
|
||||
throws ClassNotFoundException, LinkageError {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("SA");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("verYs3cret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:sqlserver://");
|
||||
checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
@DockerComposeTest(composeFile = "mssqlserver-with-jdbc-parameters-compose.yaml", image = TestImage.SQL_SERVER)
|
||||
void runWithJdbcParametersCreatesConnectionDetailsThatCanBeUsedToAccessDatabase(
|
||||
JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("SA");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("verYs3cret");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:sqlserver://")
|
||||
.contains(";sendStringParametersAsUnicode=false;");
|
||||
checkDatabaseAccess(connectionDetails);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private void checkDatabaseAccess(JdbcConnectionDetails connectionDetails) throws ClassNotFoundException {
|
||||
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
|
||||
dataSource.setUrl(connectionDetails.getJdbcUrl());
|
||||
dataSource.setUsername(connectionDetails.getUsername());
|
||||
dataSource.setPassword(connectionDetails.getPassword());
|
||||
dataSource.setDriverClass((Class<? extends Driver>) ClassUtils.forName(connectionDetails.getDriverClassName(),
|
||||
getClass().getClassLoader()));
|
||||
JdbcTemplate template = new JdbcTemplate(dataSource);
|
||||
assertThat(template.queryForObject(DatabaseDriver.SQLSERVER.getValidationQuery(), Integer.class)).isEqualTo(1);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,81 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.clickhouse;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
|
||||
import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBuilder;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for a {@code clickhouse} service.
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
class ClickHouseJdbcDockerComposeConnectionDetailsFactory
|
||||
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
|
||||
|
||||
private static final String[] CLICKHOUSE_CONTAINER_NAMES = { "clickhouse/clickhouse-server", "bitnami/clickhouse" };
|
||||
|
||||
protected ClickHouseJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super(CLICKHOUSE_CONTAINER_NAMES);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JdbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
|
||||
return new ClickhouseJdbcDockerComposeConnectionDetails(source.getRunningService());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link JdbcConnectionDetails} backed by a {@code clickhouse}
|
||||
* {@link RunningService}.
|
||||
*/
|
||||
static class ClickhouseJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new JdbcUrlBuilder("clickhouse", 8123);
|
||||
|
||||
private final ClickHouseEnvironment environment;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
ClickhouseJdbcDockerComposeConnectionDetails(RunningService service) {
|
||||
super(service);
|
||||
this.environment = new ClickHouseEnvironment(service.env());
|
||||
this.jdbcUrl = jdbcUrlBuilder.build(service, this.environment.getDatabase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return this.environment.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return this.environment.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcUrl() {
|
||||
return this.jdbcUrl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,100 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.jdbc;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Utility used to build a JDBC URL for a {@link RunningService}.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @since 3.1.0
|
||||
*/
|
||||
public class JdbcUrlBuilder {
|
||||
|
||||
private static final String PARAMETERS_LABEL = "org.springframework.boot.jdbc.parameters";
|
||||
|
||||
private final String driverProtocol;
|
||||
|
||||
private final int containerPort;
|
||||
|
||||
/**
|
||||
* Create a new {@link JdbcUrlBuilder} instance.
|
||||
* @param driverProtocol the driver protocol
|
||||
* @param containerPort the source container port
|
||||
*/
|
||||
public JdbcUrlBuilder(String driverProtocol, int containerPort) {
|
||||
Assert.notNull(driverProtocol, "'driverProtocol' must not be null");
|
||||
this.driverProtocol = driverProtocol;
|
||||
this.containerPort = containerPort;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a JDBC URL for the given {@link RunningService}.
|
||||
* @param service the running service
|
||||
* @return a new JDBC URL
|
||||
*/
|
||||
public String build(RunningService service) {
|
||||
return build(service, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build a JDBC URL for the given {@link RunningService} and database.
|
||||
* @param service the running service
|
||||
* @param database the database to connect to
|
||||
* @return a new JDBC URL
|
||||
*/
|
||||
public String build(RunningService service, String database) {
|
||||
return urlFor(service, database);
|
||||
}
|
||||
|
||||
private String urlFor(RunningService service, String database) {
|
||||
Assert.notNull(service, "'service' must not be null");
|
||||
StringBuilder url = new StringBuilder("jdbc:%s://%s:%d".formatted(this.driverProtocol, service.host(),
|
||||
service.ports().get(this.containerPort)));
|
||||
if (StringUtils.hasLength(database)) {
|
||||
url.append("/");
|
||||
url.append(database);
|
||||
}
|
||||
String parameters = getParameters(service);
|
||||
if (StringUtils.hasLength(parameters)) {
|
||||
appendParameters(url, parameters);
|
||||
}
|
||||
return url.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* Appends to the given {@code url} the given {@code parameters}.
|
||||
* <p>
|
||||
* The default implementation appends a {@code ?} followed by the {@code parameters}.
|
||||
* @param url the url
|
||||
* @param parameters the parameters
|
||||
* @since 3.2.7
|
||||
*/
|
||||
protected void appendParameters(StringBuilder url, String parameters) {
|
||||
url.append("?").append(parameters);
|
||||
}
|
||||
|
||||
private String getParameters(RunningService service) {
|
||||
return service.labels().get(PARAMETERS_LABEL);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Utilities to help when creating
|
||||
* {@link org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails}.
|
||||
*/
|
||||
package org.springframework.boot.docker.compose.service.connection.jdbc;
|
||||
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.mariadb;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
|
||||
import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBuilder;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for a {@code mariadb} service.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class MariaDbJdbcDockerComposeConnectionDetailsFactory
|
||||
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
|
||||
|
||||
private static final String[] MARIADB_CONTAINER_NAMES = { "mariadb", "bitnami/mariadb" };
|
||||
|
||||
protected MariaDbJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super(MARIADB_CONTAINER_NAMES);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JdbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
|
||||
return new MariaDbJdbcDockerComposeConnectionDetails(source.getRunningService());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link JdbcConnectionDetails} backed by a {@code mariadb} {@link RunningService}.
|
||||
*/
|
||||
static class MariaDbJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new JdbcUrlBuilder("mariadb", 3306);
|
||||
|
||||
private final MariaDbEnvironment environment;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
MariaDbJdbcDockerComposeConnectionDetails(RunningService service) {
|
||||
super(service);
|
||||
this.environment = new MariaDbEnvironment(service.env());
|
||||
this.jdbcUrl = jdbcUrlBuilder.build(service, this.environment.getDatabase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return this.environment.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return this.environment.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcUrl() {
|
||||
return this.jdbcUrl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,83 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.mysql;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
|
||||
import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBuilder;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for a {@code mysql} service.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class MySqlJdbcDockerComposeConnectionDetailsFactory
|
||||
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
|
||||
|
||||
private static final String[] MYSQL_CONTAINER_NAMES = { "mysql", "bitnami/mysql" };
|
||||
|
||||
protected MySqlJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super(MYSQL_CONTAINER_NAMES);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JdbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
|
||||
return new MySqlJdbcDockerComposeConnectionDetails(source.getRunningService());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link JdbcConnectionDetails} backed by a {@code mysql} {@link RunningService}.
|
||||
*/
|
||||
static class MySqlJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new JdbcUrlBuilder("mysql", 3306);
|
||||
|
||||
private final MySqlEnvironment environment;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
MySqlJdbcDockerComposeConnectionDetails(RunningService service) {
|
||||
super(service);
|
||||
this.environment = new MySqlEnvironment(service.env());
|
||||
this.jdbcUrl = jdbcUrlBuilder.build(service, this.environment.getDatabase());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return this.environment.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return this.environment.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcUrl() {
|
||||
return this.jdbcUrl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.oracle;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for an {@link OracleContainer#FREE} service.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
class OracleFreeJdbcDockerComposeConnectionDetailsFactory extends OracleJdbcDockerComposeConnectionDetailsFactory {
|
||||
|
||||
protected OracleFreeJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super(OracleContainer.FREE);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,90 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.oracle;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* Base class for a {@link DockerComposeConnectionDetailsFactory} to create
|
||||
* {@link JdbcConnectionDetails} for an {@code oracle-free} or {@code oracle-xe} service.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
abstract class OracleJdbcDockerComposeConnectionDetailsFactory
|
||||
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
|
||||
|
||||
private final String defaultDatabase;
|
||||
|
||||
protected OracleJdbcDockerComposeConnectionDetailsFactory(OracleContainer container) {
|
||||
super(container.getImageName());
|
||||
this.defaultDatabase = container.getDefaultDatabase();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JdbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
|
||||
return new OracleJdbcDockerComposeConnectionDetails(source.getRunningService(), this.defaultDatabase);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link JdbcConnectionDetails} backed by an {@code oracle-xe} or {@code oracle-free}
|
||||
* {@link RunningService}.
|
||||
*/
|
||||
static class OracleJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final String PARAMETERS_LABEL = "org.springframework.boot.jdbc.parameters";
|
||||
|
||||
private final OracleEnvironment environment;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
OracleJdbcDockerComposeConnectionDetails(RunningService service, String defaultDatabase) {
|
||||
super(service);
|
||||
this.environment = new OracleEnvironment(service.env(), defaultDatabase);
|
||||
this.jdbcUrl = "jdbc:oracle:thin:@" + service.host() + ":" + service.ports().get(1521) + "/"
|
||||
+ this.environment.getDatabase() + getParameters(service);
|
||||
}
|
||||
|
||||
private String getParameters(RunningService service) {
|
||||
String parameters = service.labels().get(PARAMETERS_LABEL);
|
||||
return (StringUtils.hasLength(parameters)) ? "?" + parameters : "";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return this.environment.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return this.environment.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcUrl() {
|
||||
return this.jdbcUrl;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,34 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.oracle;
|
||||
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for an {@link OracleContainer#XE} service.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
class OracleXeJdbcDockerComposeConnectionDetailsFactory extends OracleJdbcDockerComposeConnectionDetailsFactory {
|
||||
|
||||
protected OracleXeJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super(OracleContainer.XE);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,110 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.postgres;
|
||||
|
||||
import java.net.URLEncoder;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
|
||||
import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBuilder;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for a {@code postgres} service.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
* @author Scott Frederick
|
||||
*/
|
||||
class PostgresJdbcDockerComposeConnectionDetailsFactory
|
||||
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
|
||||
|
||||
private static final String[] POSTGRES_CONTAINER_NAMES = { "postgres", "bitnami/postgresql" };
|
||||
|
||||
protected PostgresJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super(POSTGRES_CONTAINER_NAMES);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JdbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
|
||||
return new PostgresJdbcDockerComposeConnectionDetails(source.getRunningService(), source.getEnvironment());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link JdbcConnectionDetails} backed by a {@code postgres} {@link RunningService}.
|
||||
*/
|
||||
static class PostgresJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new JdbcUrlBuilder("postgresql", 5432);
|
||||
|
||||
private final PostgresEnvironment environment;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
PostgresJdbcDockerComposeConnectionDetails(RunningService service, Environment environment) {
|
||||
super(service);
|
||||
this.environment = new PostgresEnvironment(service.env());
|
||||
this.jdbcUrl = addApplicationNameIfNecessary(jdbcUrlBuilder.build(service, this.environment.getDatabase()),
|
||||
environment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return this.environment.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return this.environment.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcUrl() {
|
||||
return this.jdbcUrl;
|
||||
}
|
||||
|
||||
private static String addApplicationNameIfNecessary(String jdbcUrl, Environment environment) {
|
||||
if (jdbcUrl.contains("&ApplicationName=") || jdbcUrl.contains("?ApplicationName=")) {
|
||||
return jdbcUrl;
|
||||
}
|
||||
String applicationName = environment.getProperty("spring.application.name");
|
||||
if (!StringUtils.hasText(applicationName)) {
|
||||
return jdbcUrl;
|
||||
}
|
||||
StringBuilder jdbcUrlBuilder = new StringBuilder(jdbcUrl);
|
||||
if (!jdbcUrl.contains("?")) {
|
||||
jdbcUrlBuilder.append("?");
|
||||
}
|
||||
else if (!jdbcUrl.endsWith("&")) {
|
||||
jdbcUrlBuilder.append("&");
|
||||
}
|
||||
return jdbcUrlBuilder.append("ApplicationName")
|
||||
.append('=')
|
||||
.append(URLEncoder.encode(applicationName, StandardCharsets.UTF_8))
|
||||
.toString();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.sqlserver;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionDetailsFactory;
|
||||
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
|
||||
import org.springframework.boot.docker.compose.service.connection.jdbc.JdbcUrlBuilder;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
|
||||
/**
|
||||
* {@link DockerComposeConnectionDetailsFactory} to create {@link JdbcConnectionDetails}
|
||||
* for a {@code mssql/server} service.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
class SqlServerJdbcDockerComposeConnectionDetailsFactory
|
||||
extends DockerComposeConnectionDetailsFactory<JdbcConnectionDetails> {
|
||||
|
||||
protected SqlServerJdbcDockerComposeConnectionDetailsFactory() {
|
||||
super("mssql/server");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JdbcConnectionDetails getDockerComposeConnectionDetails(DockerComposeConnectionSource source) {
|
||||
return new SqlServerJdbcDockerComposeConnectionDetails(source.getRunningService());
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link JdbcConnectionDetails} backed by a {@code mssql/server}
|
||||
* {@link RunningService}.
|
||||
*/
|
||||
static class SqlServerJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new SqlServerJdbcUrlBuilder("sqlserver", 1433);
|
||||
|
||||
private final SqlServerEnvironment environment;
|
||||
|
||||
private final String jdbcUrl;
|
||||
|
||||
SqlServerJdbcDockerComposeConnectionDetails(RunningService service) {
|
||||
super(service);
|
||||
this.environment = new SqlServerEnvironment(service.env());
|
||||
this.jdbcUrl = disableEncryptionIfNecessary(jdbcUrlBuilder.build(service));
|
||||
}
|
||||
|
||||
private String disableEncryptionIfNecessary(String jdbcUrl) {
|
||||
if (jdbcUrl.contains(";encrypt=false;")) {
|
||||
return jdbcUrl;
|
||||
}
|
||||
StringBuilder jdbcUrlBuilder = new StringBuilder(jdbcUrl);
|
||||
if (!jdbcUrl.endsWith(";")) {
|
||||
jdbcUrlBuilder.append(";");
|
||||
}
|
||||
jdbcUrlBuilder.append("encrypt=false;");
|
||||
return jdbcUrlBuilder.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return this.environment.getUsername();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPassword() {
|
||||
return this.environment.getPassword();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getJdbcUrl() {
|
||||
return this.jdbcUrl;
|
||||
}
|
||||
|
||||
private static final class SqlServerJdbcUrlBuilder extends JdbcUrlBuilder {
|
||||
|
||||
private SqlServerJdbcUrlBuilder(String driverProtocol, int containerPort) {
|
||||
super(driverProtocol, containerPort);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void appendParameters(StringBuilder url, String parameters) {
|
||||
url.append(";").append(parameters);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,29 +1,22 @@
|
||||
# Connection Details Factories
|
||||
org.springframework.boot.autoconfigure.service.connection.ConnectionDetailsFactory=\
|
||||
org.springframework.boot.docker.compose.service.connection.clickhouse.ClickHouseJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.clickhouse.ClickHouseR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.flyway.JdbcAdaptingFlywayConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.hazelcast.HazelcastDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.ldap.LLdapDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.ldap.OpenLdapDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.liquibase.JdbcAdaptingLiquibaseConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.mariadb.MariaDbJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.mariadb.MariaDbR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.mongo.MongoDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.mysql.MySqlJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.mysql.MySqlR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.neo4j.Neo4jDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.oracle.OracleFreeJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.oracle.OracleFreeR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.oracle.OracleXeJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.oracle.OracleXeR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.otlp.OpenTelemetryLoggingDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.otlp.OpenTelemetryMetricsDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.otlp.OpenTelemetryTracingDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.postgres.PostgresJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.postgres.PostgresR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.pulsar.PulsarDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.redis.RedisDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.sqlserver.SqlServerJdbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.sqlserver.SqlServerR2dbcDockerComposeConnectionDetailsFactory,\
|
||||
org.springframework.boot.docker.compose.service.connection.zipkin.ZipkinDockerComposeConnectionDetailsFactory
|
||||
|
||||
@@ -1,104 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.jdbc;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.ConnectionPorts;
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* Tests for {@link JdbcUrlBuilder}.
|
||||
*
|
||||
* @author Moritz Halbritter
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
class JdbcUrlBuilderTests {
|
||||
|
||||
private JdbcUrlBuilder builder = new JdbcUrlBuilder("mydb", 1234);
|
||||
|
||||
@Test
|
||||
void createWhenDriverProtocolIsNullThrowsException() {
|
||||
assertThatIllegalArgumentException().isThrownBy(() -> new JdbcUrlBuilder(null, 123))
|
||||
.withMessage("'driverProtocol' must not be null");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildBuildsUrlForService() {
|
||||
RunningService service = mockService(456);
|
||||
String url = this.builder.build(service);
|
||||
assertThat(url).isEqualTo("jdbc:mydb://myhost:456");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildBuildsUrlForServiceAndDatabase() {
|
||||
RunningService service = mockService(456);
|
||||
String url = this.builder.build(service, "mydb");
|
||||
assertThat(url).isEqualTo("jdbc:mydb://myhost:456/mydb");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildWhenHasParamsLabelBuildsUrl() {
|
||||
RunningService service = mockService(456, Map.of("org.springframework.boot.jdbc.parameters", "foo=bar"));
|
||||
String url = this.builder.build(service, "mydb");
|
||||
assertThat(url).isEqualTo("jdbc:mydb://myhost:456/mydb?foo=bar");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildWithCustomAppendParametersWhenHasParamsLabelBuildsUrl() {
|
||||
RunningService service = mockService(456, Map.of("org.springframework.boot.jdbc.parameters", "foo=bar"));
|
||||
String url = new JdbcUrlBuilder("mydb", 1234) {
|
||||
|
||||
@Override
|
||||
protected void appendParameters(StringBuilder url, String parameters) {
|
||||
url.append(";").append(parameters);
|
||||
}
|
||||
|
||||
}.build(service, "mydb");
|
||||
assertThat(url).isEqualTo("jdbc:mydb://myhost:456/mydb;foo=bar");
|
||||
}
|
||||
|
||||
@Test
|
||||
void buildWhenServiceIsNullThrowsException() {
|
||||
assertThatIllegalArgumentException().isThrownBy(() -> this.builder.build(null, "mydb"))
|
||||
.withMessage("'service' must not be null");
|
||||
}
|
||||
|
||||
private RunningService mockService(int mappedPort) {
|
||||
return mockService(mappedPort, Collections.emptyMap());
|
||||
}
|
||||
|
||||
private RunningService mockService(int mappedPort, Map<String, String> labels) {
|
||||
RunningService service = mock(RunningService.class);
|
||||
ConnectionPorts ports = mock(ConnectionPorts.class);
|
||||
given(ports.get(1234)).willReturn(mappedPort);
|
||||
given(service.host()).willReturn("myhost");
|
||||
given(service.ports()).willReturn(ports);
|
||||
given(service.labels()).willReturn(labels);
|
||||
return service;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,120 +0,0 @@
|
||||
/*
|
||||
* Copyright 2012-2025 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.boot.docker.compose.service.connection.postgres;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.docker.compose.core.ConnectionPorts;
|
||||
import org.springframework.boot.docker.compose.core.RunningService;
|
||||
import org.springframework.boot.jdbc.autoconfigure.JdbcConnectionDetails;
|
||||
import org.springframework.mock.env.MockEnvironment;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
||||
/**
|
||||
* Tests for
|
||||
* {@link PostgresJdbcDockerComposeConnectionDetailsFactory.PostgresJdbcDockerComposeConnectionDetails}.
|
||||
*
|
||||
* @author Dmytro Nosan
|
||||
*/
|
||||
class PostgresJdbcDockerComposeConnectionDetailsFactoryConnectionDetailsTests {
|
||||
|
||||
private final RunningService service = mock(RunningService.class);
|
||||
|
||||
private final MockEnvironment environment = new MockEnvironment();
|
||||
|
||||
private final Map<String, String> labels = new LinkedHashMap<>();
|
||||
|
||||
PostgresJdbcDockerComposeConnectionDetailsFactoryConnectionDetailsTests() {
|
||||
given(this.service.env())
|
||||
.willReturn(Map.of("POSTGRES_USER", "user", "POSTGRES_PASSWORD", "password", "POSTGRES_DB", "database"));
|
||||
given(this.service.labels()).willReturn(this.labels);
|
||||
ConnectionPorts connectionPorts = mock(ConnectionPorts.class);
|
||||
given(this.service.ports()).willReturn(connectionPorts);
|
||||
given(this.service.host()).willReturn("localhost");
|
||||
given(connectionPorts.get(5432)).willReturn(30001);
|
||||
}
|
||||
|
||||
@Test
|
||||
void createConnectionDetails() {
|
||||
JdbcConnectionDetails connectionDetails = getConnectionDetails();
|
||||
assertConnectionDetails(connectionDetails);
|
||||
assertThat(connectionDetails.getJdbcUrl()).endsWith("/database");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createConnectionDetailsWithLabels() {
|
||||
this.labels.put("org.springframework.boot.jdbc.parameters", "connectTimeout=30&ApplicationName=spring-boot");
|
||||
JdbcConnectionDetails connectionDetails = getConnectionDetails();
|
||||
assertConnectionDetails(connectionDetails);
|
||||
assertThat(connectionDetails.getJdbcUrl()).endsWith("?connectTimeout=30&ApplicationName=spring-boot");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createConnectionDetailsWithApplicationNameLabelTakesPrecedence() {
|
||||
this.labels.put("org.springframework.boot.jdbc.parameters", "ApplicationName=spring-boot");
|
||||
this.environment.setProperty("spring.application.name", "my-app");
|
||||
JdbcConnectionDetails connectionDetails = getConnectionDetails();
|
||||
assertConnectionDetails(connectionDetails);
|
||||
assertThat(connectionDetails.getJdbcUrl()).endsWith("?ApplicationName=spring-boot");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createConnectionDetailsWithSpringApplicationName() {
|
||||
this.environment.setProperty("spring.application.name", "spring boot");
|
||||
JdbcConnectionDetails connectionDetails = getConnectionDetails();
|
||||
assertConnectionDetails(connectionDetails);
|
||||
assertThat(connectionDetails.getJdbcUrl()).endsWith("?ApplicationName=spring+boot");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createConnectionDetailsAppendSpringApplicationName() {
|
||||
this.labels.put("org.springframework.boot.jdbc.parameters", "connectTimeout=30");
|
||||
this.environment.setProperty("spring.application.name", "spring boot");
|
||||
JdbcConnectionDetails connectionDetails = getConnectionDetails();
|
||||
assertConnectionDetails(connectionDetails);
|
||||
assertThat(connectionDetails.getJdbcUrl()).endsWith("?connectTimeout=30&ApplicationName=spring+boot");
|
||||
}
|
||||
|
||||
@Test
|
||||
void createConnectionDetailsAppendSpringApplicationNameParametersEndedWithAmpersand() {
|
||||
this.labels.put("org.springframework.boot.jdbc.parameters", "connectTimeout=30&");
|
||||
this.environment.setProperty("spring.application.name", "spring boot");
|
||||
JdbcConnectionDetails connectionDetails = getConnectionDetails();
|
||||
assertConnectionDetails(connectionDetails);
|
||||
assertThat(connectionDetails.getJdbcUrl()).endsWith("?connectTimeout=30&ApplicationName=spring+boot");
|
||||
|
||||
}
|
||||
|
||||
private void assertConnectionDetails(JdbcConnectionDetails connectionDetails) {
|
||||
assertThat(connectionDetails.getUsername()).isEqualTo("user");
|
||||
assertThat(connectionDetails.getPassword()).isEqualTo("password");
|
||||
assertThat(connectionDetails.getJdbcUrl()).startsWith("jdbc:postgresql://localhost:30001/database");
|
||||
assertThat(connectionDetails.getDriverClassName()).isEqualTo("org.postgresql.Driver");
|
||||
}
|
||||
|
||||
private JdbcConnectionDetails getConnectionDetails() {
|
||||
return new PostgresJdbcDockerComposeConnectionDetailsFactory.PostgresJdbcDockerComposeConnectionDetails(
|
||||
this.service, this.environment);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user