Fix appending of JDBC parameters to SQL Server JDBC URL
Fixes gh-41146
This commit is contained in:
committed by
Phillip Webb
parent
43cd24102f
commit
126e87e44d
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2012-2023 the original author or authors.
|
||||
* 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.
|
||||
@@ -67,6 +67,20 @@ class JdbcUrlBuilderTests {
|
||||
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"))
|
||||
|
||||
@@ -40,13 +40,27 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
disabledReason = "The SQL server image has no ARM support")
|
||||
class SqlServerJdbcDockerComposeConnectionDetailsFactoryIntegrationTests {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@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());
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
services:
|
||||
database:
|
||||
image: '{imageName}'
|
||||
ports:
|
||||
- '1433'
|
||||
environment:
|
||||
- 'MSSQL_PID=express'
|
||||
- 'MSSQL_SA_PASSWORD=verYs3cret'
|
||||
- 'ACCEPT_EULA=yes'
|
||||
labels:
|
||||
org.springframework.boot.jdbc.parameters: sendStringParametersAsUnicode=false
|
||||
Reference in New Issue
Block a user