From 7ad90fb96369ec3ce4fa36b5c460945d382b8d90 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Mon, 18 Aug 2025 11:36:08 +0200 Subject: [PATCH] Improve null-safety of core/spring-boot-docker-compose See gh-46926 --- .../docker/compose/core/DefaultRunningService.java | 2 +- .../boot/docker/compose/core/DockerCli.java | 2 +- .../boot/docker/compose/core/DockerEnv.java | 8 ++++---- .../boot/docker/compose/core/RunningService.java | 2 +- .../docker/compose/ActiveMQClassicEnvironment.java | 2 +- .../activemq/docker/compose/ActiveMQEnvironment.java | 2 +- .../boot/amqp/docker/compose/RabbitEnvironment.java | 4 +++- .../artemis/docker/compose/ArtemisEnvironment.java | 2 +- .../cassandra/docker/compose/CassandraEnvironment.java | 4 +++- .../docker/compose/ElasticsearchEnvironment.java | 2 +- .../hazelcast/docker/compose/HazelcastEnvironment.java | 2 +- .../jdbc/docker/compose/ClickHouseEnvironment.java | 6 ++++-- .../boot/jdbc/docker/compose/MariaDbEnvironment.java | 10 ++++++---- .../boot/jdbc/docker/compose/MySqlEnvironment.java | 8 +++++--- .../boot/jdbc/docker/compose/OracleEnvironment.java | 6 ++++-- .../boot/jdbc/docker/compose/PostgresEnvironment.java | 8 ++++---- .../boot/jdbc/docker/compose/SqlServerEnvironment.java | 6 ++++-- .../LLdapDockerComposeConnectionDetailsFactory.java | 4 +++- .../OpenLdapDockerComposeConnectionDetailsFactory.java | 4 +++- .../boot/mongodb/docker/compose/MongoEnvironment.java | 2 +- .../boot/neo4j/docker/compose/Neo4jEnvironment.java | 2 +- .../r2dbc/docker/compose/ClickHouseEnvironment.java | 6 ++++-- .../boot/r2dbc/docker/compose/MariaDbEnvironment.java | 10 ++++++---- .../boot/r2dbc/docker/compose/MySqlEnvironment.java | 8 +++++--- .../boot/r2dbc/docker/compose/OracleEnvironment.java | 6 ++++-- .../boot/r2dbc/docker/compose/PostgresEnvironment.java | 8 ++++---- .../r2dbc/docker/compose/SqlServerEnvironment.java | 6 ++++-- 27 files changed, 80 insertions(+), 52 deletions(-) diff --git a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DefaultRunningService.java b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DefaultRunningService.java index b1c09e8a805..c0f545157ab 100644 --- a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DefaultRunningService.java +++ b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DefaultRunningService.java @@ -88,7 +88,7 @@ class DefaultRunningService implements RunningService, OriginProvider { } @Override - public Map env() { + public Map env() { return this.env.asMap(); } diff --git a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerCli.java b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerCli.java index cc9b3f39fa1..194f2da41ad 100644 --- a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerCli.java +++ b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerCli.java @@ -44,7 +44,7 @@ import org.springframework.util.CollectionUtils; */ class DockerCli { - private static final Map dockerCommandsCache = new HashMap<>(); + private static final Map<@Nullable File, DockerCommands> dockerCommandsCache = new HashMap<>(); private static final Log logger = LogFactory.getLog(DockerCli.class); diff --git a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerEnv.java b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerEnv.java index d21e7f799bb..457d81a1694 100644 --- a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerEnv.java +++ b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerEnv.java @@ -34,7 +34,7 @@ import org.springframework.util.CollectionUtils; */ class DockerEnv { - private final Map map; + private final Map map; /** * Create a new {@link DockerEnv} instance. @@ -44,11 +44,11 @@ class DockerEnv { this.map = parse(env); } - private Map parse(List env) { + private Map parse(List env) { if (CollectionUtils.isEmpty(env)) { return Collections.emptyMap(); } - Map result = new LinkedHashMap<>(); + Map result = new LinkedHashMap<>(); env.stream().map(this::parseEntry).forEach((entry) -> result.put(entry.key(), entry.value())); return Collections.unmodifiableMap(result); } @@ -67,7 +67,7 @@ class DockerEnv { * Return the env as a {@link Map}. * @return the env as a map */ - Map asMap() { + Map asMap() { return this.map; } diff --git a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/RunningService.java b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/RunningService.java index 3d95f0ad373..634ad1eb41a 100644 --- a/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/RunningService.java +++ b/core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/RunningService.java @@ -58,7 +58,7 @@ public interface RunningService { * Return the environment defined for the service. * @return the service env */ - Map env(); + Map env(); /** * Return the labels attached to the service. diff --git a/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQClassicEnvironment.java b/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQClassicEnvironment.java index be1192dcc43..b805b393088 100644 --- a/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQClassicEnvironment.java +++ b/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQClassicEnvironment.java @@ -32,7 +32,7 @@ class ActiveMQClassicEnvironment { private final @Nullable String password; - ActiveMQClassicEnvironment(Map env) { + ActiveMQClassicEnvironment(Map env) { this.user = env.get("ACTIVEMQ_CONNECTION_USER"); this.password = env.get("ACTIVEMQ_CONNECTION_PASSWORD"); } diff --git a/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQEnvironment.java b/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQEnvironment.java index a5775a0fff6..ca80509ea83 100644 --- a/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQEnvironment.java +++ b/module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQEnvironment.java @@ -31,7 +31,7 @@ class ActiveMQEnvironment { private final @Nullable String password; - ActiveMQEnvironment(Map env) { + ActiveMQEnvironment(Map env) { this.user = env.get("ACTIVEMQ_USERNAME"); this.password = env.get("ACTIVEMQ_PASSWORD"); } diff --git a/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitEnvironment.java b/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitEnvironment.java index ad3b5564f48..2f6133783bc 100644 --- a/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitEnvironment.java +++ b/module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.amqp.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + /** * RabbitMQ environment details. * @@ -32,7 +34,7 @@ class RabbitEnvironment { private final String password; - RabbitEnvironment(Map env) { + RabbitEnvironment(Map env) { this.username = env.getOrDefault("RABBITMQ_DEFAULT_USER", env.getOrDefault("RABBITMQ_USERNAME", "guest")); this.password = env.getOrDefault("RABBITMQ_DEFAULT_PASS", env.getOrDefault("RABBITMQ_PASSWORD", "guest")); } diff --git a/module/spring-boot-artemis/src/main/java/org/springframework/boot/artemis/docker/compose/ArtemisEnvironment.java b/module/spring-boot-artemis/src/main/java/org/springframework/boot/artemis/docker/compose/ArtemisEnvironment.java index da4d6a0da71..be7f59144aa 100644 --- a/module/spring-boot-artemis/src/main/java/org/springframework/boot/artemis/docker/compose/ArtemisEnvironment.java +++ b/module/spring-boot-artemis/src/main/java/org/springframework/boot/artemis/docker/compose/ArtemisEnvironment.java @@ -32,7 +32,7 @@ class ArtemisEnvironment { private final @Nullable String password; - ArtemisEnvironment(Map env) { + ArtemisEnvironment(Map env) { this.user = env.get("ARTEMIS_USER"); this.password = env.get("ARTEMIS_PASSWORD"); } diff --git a/module/spring-boot-cassandra/src/main/java/org/springframework/boot/cassandra/docker/compose/CassandraEnvironment.java b/module/spring-boot-cassandra/src/main/java/org/springframework/boot/cassandra/docker/compose/CassandraEnvironment.java index ffa7fcf77ba..d3ea505b900 100644 --- a/module/spring-boot-cassandra/src/main/java/org/springframework/boot/cassandra/docker/compose/CassandraEnvironment.java +++ b/module/spring-boot-cassandra/src/main/java/org/springframework/boot/cassandra/docker/compose/CassandraEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.cassandra.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + /** * Cassandra environment details. * @@ -27,7 +29,7 @@ class CassandraEnvironment { private final String datacenter; - CassandraEnvironment(Map env) { + CassandraEnvironment(Map env) { this.datacenter = env.getOrDefault("CASSANDRA_DC", env.getOrDefault("CASSANDRA_DATACENTER", "datacenter1")); } diff --git a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java index 026039c37a7..655d2dd5a74 100644 --- a/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java +++ b/module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java @@ -33,7 +33,7 @@ class ElasticsearchEnvironment { private final @Nullable String password; - ElasticsearchEnvironment(Map env) { + ElasticsearchEnvironment(Map env) { Assert.state(!env.containsKey("ELASTIC_PASSWORD_FILE"), "ELASTIC_PASSWORD_FILE is not supported"); this.password = env.get("ELASTIC_PASSWORD"); } diff --git a/module/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/docker/compose/HazelcastEnvironment.java b/module/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/docker/compose/HazelcastEnvironment.java index 23dec3fd390..a88dcf250d3 100644 --- a/module/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/docker/compose/HazelcastEnvironment.java +++ b/module/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/docker/compose/HazelcastEnvironment.java @@ -29,7 +29,7 @@ class HazelcastEnvironment { private final @Nullable String clusterName; - HazelcastEnvironment(Map env) { + HazelcastEnvironment(Map env) { this.clusterName = env.get("HZ_CLUSTERNAME"); } diff --git a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/ClickHouseEnvironment.java b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/ClickHouseEnvironment.java index 99e081bd86d..0140d7dd2ac 100644 --- a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/ClickHouseEnvironment.java +++ b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/ClickHouseEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -34,13 +36,13 @@ class ClickHouseEnvironment { private final String database; - ClickHouseEnvironment(Map env) { + ClickHouseEnvironment(Map env) { this.username = env.getOrDefault("CLICKHOUSE_USER", "default"); this.password = extractPassword(env); this.database = env.getOrDefault("CLICKHOUSE_DB", "default"); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD"); String password = env.get("CLICKHOUSE_PASSWORD"); Assert.state(StringUtils.hasLength(password) || allowEmpty, "No ClickHouse password found"); diff --git a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MariaDbEnvironment.java b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MariaDbEnvironment.java index 355e64d43d2..c4ed44db513 100644 --- a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MariaDbEnvironment.java +++ b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MariaDbEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -37,18 +39,18 @@ class MariaDbEnvironment { private final String database; - MariaDbEnvironment(Map env) { + MariaDbEnvironment(Map env) { this.username = extractUsername(env); this.password = extractPassword(env); this.database = extractDatabase(env); } - private String extractUsername(Map env) { + private String extractUsername(Map env) { String user = env.get("MARIADB_USER"); return (user != null) ? user : env.getOrDefault("MYSQL_USER", "root"); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { Assert.state(!env.containsKey("MARIADB_RANDOM_ROOT_PASSWORD"), "MARIADB_RANDOM_ROOT_PASSWORD is not supported"); Assert.state(!env.containsKey("MYSQL_RANDOM_ROOT_PASSWORD"), "MYSQL_RANDOM_ROOT_PASSWORD is not supported"); Assert.state(!env.containsKey("MARIADB_ROOT_PASSWORD_HASH"), "MARIADB_ROOT_PASSWORD_HASH is not supported"); @@ -62,7 +64,7 @@ class MariaDbEnvironment { return (password != null) ? password : ""; } - private String extractDatabase(Map env) { + private String extractDatabase(Map env) { String database = env.get("MARIADB_DATABASE"); database = (database != null) ? database : env.get("MYSQL_DATABASE"); Assert.state(database != null, "No MARIADB_DATABASE defined"); diff --git a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MySqlEnvironment.java b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MySqlEnvironment.java index e2dc5f2d070..af478601cd2 100644 --- a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MySqlEnvironment.java +++ b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MySqlEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -37,13 +39,13 @@ class MySqlEnvironment { private final String database; - MySqlEnvironment(Map env) { + MySqlEnvironment(Map env) { this.username = env.getOrDefault("MYSQL_USER", "root"); this.password = extractPassword(env); this.database = extractDatabase(env); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { Assert.state(!env.containsKey("MYSQL_RANDOM_ROOT_PASSWORD"), "MYSQL_RANDOM_ROOT_PASSWORD is not supported"); boolean allowEmpty = env.containsKey("MYSQL_ALLOW_EMPTY_PASSWORD") || env.containsKey("ALLOW_EMPTY_PASSWORD"); String password = env.get("MYSQL_PASSWORD"); @@ -52,7 +54,7 @@ class MySqlEnvironment { return (password != null) ? password : ""; } - private String extractDatabase(Map env) { + private String extractDatabase(Map env) { String database = env.get("MYSQL_DATABASE"); Assert.state(database != null, "No MYSQL_DATABASE defined"); return database; diff --git a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/OracleEnvironment.java b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/OracleEnvironment.java index 0374a5ea16d..bf61f3bbea9 100644 --- a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/OracleEnvironment.java +++ b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/OracleEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -34,13 +36,13 @@ class OracleEnvironment { private final String database; - OracleEnvironment(Map env, String defaultDatabase) { + OracleEnvironment(Map env, String defaultDatabase) { this.username = env.getOrDefault("APP_USER", "system"); this.password = extractPassword(env); this.database = env.getOrDefault("ORACLE_DATABASE", defaultDatabase); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { if (env.containsKey("APP_USER")) { String password = env.get("APP_USER_PASSWORD"); Assert.state(StringUtils.hasLength(password), "No Oracle app password found"); diff --git a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/PostgresEnvironment.java b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/PostgresEnvironment.java index 1604b0e490d..74fcb336f0e 100644 --- a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/PostgresEnvironment.java +++ b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/PostgresEnvironment.java @@ -49,13 +49,13 @@ class PostgresEnvironment { private final String database; - PostgresEnvironment(Map env) { + PostgresEnvironment(Map env) { this.username = extract(env, USERNAME_KEYS, DEFAULT_USERNAME); this.password = extractPassword(env); this.database = extract(env, DATABASE_KEYS, this.username); } - private String extract(Map env, String[] keys, String defaultValue) { + private String extract(Map env, String[] keys, String defaultValue) { for (String key : keys) { if (env.containsKey(key)) { return env.get(key); @@ -64,7 +64,7 @@ class PostgresEnvironment { return defaultValue; } - private @Nullable String extractPassword(Map env) { + private @Nullable String extractPassword(Map env) { if (isUsingTrustHostAuthMethod(env)) { return null; } @@ -74,7 +74,7 @@ class PostgresEnvironment { return (password != null) ? password : ""; } - private boolean isUsingTrustHostAuthMethod(Map env) { + private boolean isUsingTrustHostAuthMethod(Map env) { String hostAuthMethod = env.get("POSTGRES_HOST_AUTH_METHOD"); return "trust".equals(hostAuthMethod); } diff --git a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/SqlServerEnvironment.java b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/SqlServerEnvironment.java index 44d605bfab9..5529f1854a2 100644 --- a/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/SqlServerEnvironment.java +++ b/module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/SqlServerEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.jdbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -32,11 +34,11 @@ class SqlServerEnvironment { private final String password; - SqlServerEnvironment(Map env) { + SqlServerEnvironment(Map env) { this.password = extractPassword(env); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { String password = env.get("MSSQL_SA_PASSWORD"); password = (password != null) ? password : env.get("SA_PASSWORD"); Assert.state(StringUtils.hasLength(password), "No MSSQL password found"); diff --git a/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/LLdapDockerComposeConnectionDetailsFactory.java b/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/LLdapDockerComposeConnectionDetailsFactory.java index 99ecbd94e9f..8f73305672e 100644 --- a/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/LLdapDockerComposeConnectionDetailsFactory.java +++ b/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/LLdapDockerComposeConnectionDetailsFactory.java @@ -18,6 +18,8 @@ package org.springframework.boot.ldap.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + 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; @@ -56,7 +58,7 @@ class LLdapDockerComposeConnectionDetailsFactory extends DockerComposeConnection LLdapDockerComposeConnectionDetails(RunningService service) { super(service); - Map env = service.env(); + Map env = service.env(); boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LLDAP_LDAPS_OPTIONS__ENABLED", "false")); String ldapPort = usesTls ? env.getOrDefault("LLDAP_LDAPS_OPTIONS__PORT", "6360") : env.getOrDefault("LLDAP_LDAP_PORT", "3890"); diff --git a/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/OpenLdapDockerComposeConnectionDetailsFactory.java b/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/OpenLdapDockerComposeConnectionDetailsFactory.java index a580a37641b..aff9cf00dd1 100644 --- a/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/OpenLdapDockerComposeConnectionDetailsFactory.java +++ b/module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/OpenLdapDockerComposeConnectionDetailsFactory.java @@ -20,6 +20,8 @@ import java.util.Arrays; import java.util.Map; import java.util.stream.Collectors; +import org.jspecify.annotations.Nullable; + 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; @@ -59,7 +61,7 @@ class OpenLdapDockerComposeConnectionDetailsFactory OpenLdapDockerComposeConnectionDetails(RunningService service) { super(service); - Map env = service.env(); + Map env = service.env(); boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LDAP_TLS", "true")); String ldapPort = usesTls ? env.getOrDefault("LDAPS_PORT", "636") : env.getOrDefault("LDAP_PORT", "389"); this.urls = new String[] { "%s://%s:%d".formatted(usesTls ? "ldaps" : "ldap", service.host(), diff --git a/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/docker/compose/MongoEnvironment.java b/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/docker/compose/MongoEnvironment.java index 8b3fd173978..fb8cf73269a 100644 --- a/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/docker/compose/MongoEnvironment.java +++ b/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/docker/compose/MongoEnvironment.java @@ -38,7 +38,7 @@ class MongoEnvironment { private final @Nullable String database; - MongoEnvironment(Map env) { + MongoEnvironment(Map env) { Assert.state(!env.containsKey("MONGO_INITDB_ROOT_USERNAME_FILE"), "MONGO_INITDB_ROOT_USERNAME_FILE is not supported"); Assert.state(!env.containsKey("MONGO_INITDB_ROOT_PASSWORD_FILE"), diff --git a/module/spring-boot-neo4j/src/main/java/org/springframework/boot/neo4j/docker/compose/Neo4jEnvironment.java b/module/spring-boot-neo4j/src/main/java/org/springframework/boot/neo4j/docker/compose/Neo4jEnvironment.java index 9017829b709..922d1b50e7c 100644 --- a/module/spring-boot-neo4j/src/main/java/org/springframework/boot/neo4j/docker/compose/Neo4jEnvironment.java +++ b/module/spring-boot-neo4j/src/main/java/org/springframework/boot/neo4j/docker/compose/Neo4jEnvironment.java @@ -32,7 +32,7 @@ class Neo4jEnvironment { private final @Nullable AuthToken authToken; - Neo4jEnvironment(Map env) { + Neo4jEnvironment(Map env) { AuthToken authToken = parse(env.get("NEO4J_AUTH")); if (authToken == null && env.containsKey("NEO4J_PASSWORD")) { authToken = parse("neo4j/" + env.get("NEO4J_PASSWORD")); diff --git a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/ClickHouseEnvironment.java b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/ClickHouseEnvironment.java index b0afa1e7bf8..c71c7d40251 100644 --- a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/ClickHouseEnvironment.java +++ b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/ClickHouseEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.r2dbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -34,13 +36,13 @@ class ClickHouseEnvironment { private final String database; - ClickHouseEnvironment(Map env) { + ClickHouseEnvironment(Map env) { this.username = env.getOrDefault("CLICKHOUSE_USER", "default"); this.password = extractPassword(env); this.database = env.getOrDefault("CLICKHOUSE_DB", "default"); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD"); String password = env.get("CLICKHOUSE_PASSWORD"); Assert.state(StringUtils.hasLength(password) || allowEmpty, "No ClickHouse password found"); diff --git a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MariaDbEnvironment.java b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MariaDbEnvironment.java index 554b598429d..e8ab53f69ed 100644 --- a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MariaDbEnvironment.java +++ b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MariaDbEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.r2dbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -37,18 +39,18 @@ class MariaDbEnvironment { private final String database; - MariaDbEnvironment(Map env) { + MariaDbEnvironment(Map env) { this.username = extractUsername(env); this.password = extractPassword(env); this.database = extractDatabase(env); } - private String extractUsername(Map env) { + private String extractUsername(Map env) { String user = env.get("MARIADB_USER"); return (user != null) ? user : env.getOrDefault("MYSQL_USER", "root"); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { Assert.state(!env.containsKey("MARIADB_RANDOM_ROOT_PASSWORD"), "MARIADB_RANDOM_ROOT_PASSWORD is not supported"); Assert.state(!env.containsKey("MYSQL_RANDOM_ROOT_PASSWORD"), "MYSQL_RANDOM_ROOT_PASSWORD is not supported"); Assert.state(!env.containsKey("MARIADB_ROOT_PASSWORD_HASH"), "MARIADB_ROOT_PASSWORD_HASH is not supported"); @@ -62,7 +64,7 @@ class MariaDbEnvironment { return (password != null) ? password : ""; } - private String extractDatabase(Map env) { + private String extractDatabase(Map env) { String database = env.get("MARIADB_DATABASE"); database = (database != null) ? database : env.get("MYSQL_DATABASE"); Assert.state(database != null, "No MARIADB_DATABASE defined"); diff --git a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MySqlEnvironment.java b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MySqlEnvironment.java index 78bcc8f7034..294d05553a7 100644 --- a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MySqlEnvironment.java +++ b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MySqlEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.r2dbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -37,13 +39,13 @@ class MySqlEnvironment { private final String database; - MySqlEnvironment(Map env) { + MySqlEnvironment(Map env) { this.username = env.getOrDefault("MYSQL_USER", "root"); this.password = extractPassword(env); this.database = extractDatabase(env); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { Assert.state(!env.containsKey("MYSQL_RANDOM_ROOT_PASSWORD"), "MYSQL_RANDOM_ROOT_PASSWORD is not supported"); boolean allowEmpty = env.containsKey("MYSQL_ALLOW_EMPTY_PASSWORD") || env.containsKey("ALLOW_EMPTY_PASSWORD"); String password = env.get("MYSQL_PASSWORD"); @@ -52,7 +54,7 @@ class MySqlEnvironment { return (password != null) ? password : ""; } - private String extractDatabase(Map env) { + private String extractDatabase(Map env) { String database = env.get("MYSQL_DATABASE"); Assert.state(database != null, "No MYSQL_DATABASE defined"); return database; diff --git a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/OracleEnvironment.java b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/OracleEnvironment.java index dc1de0fd880..5077ae97962 100644 --- a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/OracleEnvironment.java +++ b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/OracleEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.r2dbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -34,13 +36,13 @@ class OracleEnvironment { private final String database; - OracleEnvironment(Map env, String defaultDatabase) { + OracleEnvironment(Map env, String defaultDatabase) { this.username = env.getOrDefault("APP_USER", "system"); this.password = extractPassword(env); this.database = env.getOrDefault("ORACLE_DATABASE", defaultDatabase); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { if (env.containsKey("APP_USER")) { String password = env.get("APP_USER_PASSWORD"); Assert.state(StringUtils.hasLength(password), "No Oracle app password found"); diff --git a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/PostgresEnvironment.java b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/PostgresEnvironment.java index 076b60a2d6a..1f79d9510cc 100644 --- a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/PostgresEnvironment.java +++ b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/PostgresEnvironment.java @@ -49,13 +49,13 @@ class PostgresEnvironment { private final String database; - PostgresEnvironment(Map env) { + PostgresEnvironment(Map env) { this.username = extract(env, USERNAME_KEYS, DEFAULT_USERNAME); this.password = extractPassword(env); this.database = extract(env, DATABASE_KEYS, this.username); } - private String extract(Map env, String[] keys, String defaultValue) { + private String extract(Map env, String[] keys, String defaultValue) { for (String key : keys) { if (env.containsKey(key)) { return env.get(key); @@ -64,7 +64,7 @@ class PostgresEnvironment { return defaultValue; } - private @Nullable String extractPassword(Map env) { + private @Nullable String extractPassword(Map env) { if (isUsingTrustHostAuthMethod(env)) { return null; } @@ -74,7 +74,7 @@ class PostgresEnvironment { return (password != null) ? password : ""; } - private boolean isUsingTrustHostAuthMethod(Map env) { + private boolean isUsingTrustHostAuthMethod(Map env) { String hostAuthMethod = env.get("POSTGRES_HOST_AUTH_METHOD"); return "trust".equals(hostAuthMethod); } diff --git a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/SqlServerEnvironment.java b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/SqlServerEnvironment.java index 0d413c655df..779cb4a75b0 100644 --- a/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/SqlServerEnvironment.java +++ b/module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/SqlServerEnvironment.java @@ -18,6 +18,8 @@ package org.springframework.boot.r2dbc.docker.compose; import java.util.Map; +import org.jspecify.annotations.Nullable; + import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -32,11 +34,11 @@ class SqlServerEnvironment { private final String password; - SqlServerEnvironment(Map env) { + SqlServerEnvironment(Map env) { this.password = extractPassword(env); } - private String extractPassword(Map env) { + private String extractPassword(Map env) { String password = env.get("MSSQL_SA_PASSWORD"); password = (password != null) ? password : env.get("SA_PASSWORD"); Assert.state(StringUtils.hasLength(password), "No MSSQL password found");