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.
|
||||
@@ -68,20 +68,33 @@ public class JdbcUrlBuilder {
|
||||
|
||||
private String urlFor(RunningService service, String database) {
|
||||
Assert.notNull(service, "Service must not be null");
|
||||
String parameters = getParameters(service);
|
||||
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);
|
||||
}
|
||||
url.append(parameters);
|
||||
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) {
|
||||
String parameters = service.labels().get(PARAMETERS_LABEL);
|
||||
return (StringUtils.hasLength(parameters)) ? "?" + parameters : "";
|
||||
return service.labels().get(PARAMETERS_LABEL);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
@@ -47,7 +47,7 @@ class SqlServerJdbcDockerComposeConnectionDetailsFactory
|
||||
static class SqlServerJdbcDockerComposeConnectionDetails extends DockerComposeConnectionDetails
|
||||
implements JdbcConnectionDetails {
|
||||
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new JdbcUrlBuilder("sqlserver", 1433);
|
||||
private static final JdbcUrlBuilder jdbcUrlBuilder = new SqlServerJdbcUrlBuilder("sqlserver", 1433);
|
||||
|
||||
private final SqlServerEnvironment environment;
|
||||
|
||||
@@ -56,7 +56,7 @@ class SqlServerJdbcDockerComposeConnectionDetailsFactory
|
||||
SqlServerJdbcDockerComposeConnectionDetails(RunningService service) {
|
||||
super(service);
|
||||
this.environment = new SqlServerEnvironment(service.env());
|
||||
this.jdbcUrl = disableEncryptionIfNecessary(jdbcUrlBuilder.build(service, ""));
|
||||
this.jdbcUrl = disableEncryptionIfNecessary(jdbcUrlBuilder.build(service));
|
||||
}
|
||||
|
||||
private String disableEncryptionIfNecessary(String jdbcUrl) {
|
||||
@@ -86,6 +86,19 @@ class SqlServerJdbcDockerComposeConnectionDetailsFactory
|
||||
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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user