Browse Source

Improve null-safety of core/spring-boot-docker-compose

See gh-46926
pull/46973/head
Moritz Halbritter 4 months ago
parent
commit
7ad90fb963
  1. 2
      core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DefaultRunningService.java
  2. 2
      core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerCli.java
  3. 8
      core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/DockerEnv.java
  4. 2
      core/spring-boot-docker-compose/src/main/java/org/springframework/boot/docker/compose/core/RunningService.java
  5. 2
      module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQClassicEnvironment.java
  6. 2
      module/spring-boot-activemq/src/main/java/org/springframework/boot/activemq/docker/compose/ActiveMQEnvironment.java
  7. 4
      module/spring-boot-amqp/src/main/java/org/springframework/boot/amqp/docker/compose/RabbitEnvironment.java
  8. 2
      module/spring-boot-artemis/src/main/java/org/springframework/boot/artemis/docker/compose/ArtemisEnvironment.java
  9. 4
      module/spring-boot-cassandra/src/main/java/org/springframework/boot/cassandra/docker/compose/CassandraEnvironment.java
  10. 2
      module/spring-boot-elasticsearch/src/main/java/org/springframework/boot/elasticsearch/docker/compose/ElasticsearchEnvironment.java
  11. 2
      module/spring-boot-hazelcast/src/main/java/org/springframework/boot/hazelcast/docker/compose/HazelcastEnvironment.java
  12. 6
      module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/ClickHouseEnvironment.java
  13. 10
      module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MariaDbEnvironment.java
  14. 8
      module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/MySqlEnvironment.java
  15. 6
      module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/OracleEnvironment.java
  16. 8
      module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/PostgresEnvironment.java
  17. 6
      module/spring-boot-jdbc/src/main/java/org/springframework/boot/jdbc/docker/compose/SqlServerEnvironment.java
  18. 4
      module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/LLdapDockerComposeConnectionDetailsFactory.java
  19. 4
      module/spring-boot-ldap/src/main/java/org/springframework/boot/ldap/docker/compose/OpenLdapDockerComposeConnectionDetailsFactory.java
  20. 2
      module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/docker/compose/MongoEnvironment.java
  21. 2
      module/spring-boot-neo4j/src/main/java/org/springframework/boot/neo4j/docker/compose/Neo4jEnvironment.java
  22. 6
      module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/ClickHouseEnvironment.java
  23. 10
      module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MariaDbEnvironment.java
  24. 8
      module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/MySqlEnvironment.java
  25. 6
      module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/OracleEnvironment.java
  26. 8
      module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/PostgresEnvironment.java
  27. 6
      module/spring-boot-r2dbc/src/main/java/org/springframework/boot/r2dbc/docker/compose/SqlServerEnvironment.java

2
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 @Override
public Map<String, String> env() { public Map<String, @Nullable String> env() {
return this.env.asMap(); return this.env.asMap();
} }

2
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 { class DockerCli {
private static final Map<File, DockerCommands> dockerCommandsCache = new HashMap<>(); private static final Map<@Nullable File, DockerCommands> dockerCommandsCache = new HashMap<>();
private static final Log logger = LogFactory.getLog(DockerCli.class); private static final Log logger = LogFactory.getLog(DockerCli.class);

8
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 { class DockerEnv {
private final Map<String, String> map; private final Map<String, @Nullable String> map;
/** /**
* Create a new {@link DockerEnv} instance. * Create a new {@link DockerEnv} instance.
@ -44,11 +44,11 @@ class DockerEnv {
this.map = parse(env); this.map = parse(env);
} }
private Map<String, String> parse(List<String> env) { private Map<String, @Nullable String> parse(List<String> env) {
if (CollectionUtils.isEmpty(env)) { if (CollectionUtils.isEmpty(env)) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
Map<String, String> result = new LinkedHashMap<>(); Map<String, @Nullable String> result = new LinkedHashMap<>();
env.stream().map(this::parseEntry).forEach((entry) -> result.put(entry.key(), entry.value())); env.stream().map(this::parseEntry).forEach((entry) -> result.put(entry.key(), entry.value()));
return Collections.unmodifiableMap(result); return Collections.unmodifiableMap(result);
} }
@ -67,7 +67,7 @@ class DockerEnv {
* Return the env as a {@link Map}. * Return the env as a {@link Map}.
* @return the env as a map * @return the env as a map
*/ */
Map<String, String> asMap() { Map<String, @Nullable String> asMap() {
return this.map; return this.map;
} }

2
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 environment defined for the service.
* @return the service env * @return the service env
*/ */
Map<String, String> env(); Map<String, @Nullable String> env();
/** /**
* Return the labels attached to the service. * Return the labels attached to the service.

2
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; private final @Nullable String password;
ActiveMQClassicEnvironment(Map<String, String> env) { ActiveMQClassicEnvironment(Map<String, @Nullable String> env) {
this.user = env.get("ACTIVEMQ_CONNECTION_USER"); this.user = env.get("ACTIVEMQ_CONNECTION_USER");
this.password = env.get("ACTIVEMQ_CONNECTION_PASSWORD"); this.password = env.get("ACTIVEMQ_CONNECTION_PASSWORD");
} }

2
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; private final @Nullable String password;
ActiveMQEnvironment(Map<String, String> env) { ActiveMQEnvironment(Map<String, @Nullable String> env) {
this.user = env.get("ACTIVEMQ_USERNAME"); this.user = env.get("ACTIVEMQ_USERNAME");
this.password = env.get("ACTIVEMQ_PASSWORD"); this.password = env.get("ACTIVEMQ_PASSWORD");
} }

4
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 java.util.Map;
import org.jspecify.annotations.Nullable;
/** /**
* RabbitMQ environment details. * RabbitMQ environment details.
* *
@ -32,7 +34,7 @@ class RabbitEnvironment {
private final String password; private final String password;
RabbitEnvironment(Map<String, String> env) { RabbitEnvironment(Map<String, @Nullable String> env) {
this.username = env.getOrDefault("RABBITMQ_DEFAULT_USER", env.getOrDefault("RABBITMQ_USERNAME", "guest")); this.username = env.getOrDefault("RABBITMQ_DEFAULT_USER", env.getOrDefault("RABBITMQ_USERNAME", "guest"));
this.password = env.getOrDefault("RABBITMQ_DEFAULT_PASS", env.getOrDefault("RABBITMQ_PASSWORD", "guest")); this.password = env.getOrDefault("RABBITMQ_DEFAULT_PASS", env.getOrDefault("RABBITMQ_PASSWORD", "guest"));
} }

2
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; private final @Nullable String password;
ArtemisEnvironment(Map<String, String> env) { ArtemisEnvironment(Map<String, @Nullable String> env) {
this.user = env.get("ARTEMIS_USER"); this.user = env.get("ARTEMIS_USER");
this.password = env.get("ARTEMIS_PASSWORD"); this.password = env.get("ARTEMIS_PASSWORD");
} }

4
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 java.util.Map;
import org.jspecify.annotations.Nullable;
/** /**
* Cassandra environment details. * Cassandra environment details.
* *
@ -27,7 +29,7 @@ class CassandraEnvironment {
private final String datacenter; private final String datacenter;
CassandraEnvironment(Map<String, String> env) { CassandraEnvironment(Map<String, @Nullable String> env) {
this.datacenter = env.getOrDefault("CASSANDRA_DC", env.getOrDefault("CASSANDRA_DATACENTER", "datacenter1")); this.datacenter = env.getOrDefault("CASSANDRA_DC", env.getOrDefault("CASSANDRA_DATACENTER", "datacenter1"));
} }

2
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; private final @Nullable String password;
ElasticsearchEnvironment(Map<String, String> env) { ElasticsearchEnvironment(Map<String, @Nullable String> env) {
Assert.state(!env.containsKey("ELASTIC_PASSWORD_FILE"), "ELASTIC_PASSWORD_FILE is not supported"); Assert.state(!env.containsKey("ELASTIC_PASSWORD_FILE"), "ELASTIC_PASSWORD_FILE is not supported");
this.password = env.get("ELASTIC_PASSWORD"); this.password = env.get("ELASTIC_PASSWORD");
} }

2
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; private final @Nullable String clusterName;
HazelcastEnvironment(Map<String, String> env) { HazelcastEnvironment(Map<String, @Nullable String> env) {
this.clusterName = env.get("HZ_CLUSTERNAME"); this.clusterName = env.get("HZ_CLUSTERNAME");
} }

6
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -34,13 +36,13 @@ class ClickHouseEnvironment {
private final String database; private final String database;
ClickHouseEnvironment(Map<String, String> env) { ClickHouseEnvironment(Map<String, @Nullable String> env) {
this.username = env.getOrDefault("CLICKHOUSE_USER", "default"); this.username = env.getOrDefault("CLICKHOUSE_USER", "default");
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = env.getOrDefault("CLICKHOUSE_DB", "default"); this.database = env.getOrDefault("CLICKHOUSE_DB", "default");
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD"); boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD");
String password = env.get("CLICKHOUSE_PASSWORD"); String password = env.get("CLICKHOUSE_PASSWORD");
Assert.state(StringUtils.hasLength(password) || allowEmpty, "No ClickHouse password found"); Assert.state(StringUtils.hasLength(password) || allowEmpty, "No ClickHouse password found");

10
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -37,18 +39,18 @@ class MariaDbEnvironment {
private final String database; private final String database;
MariaDbEnvironment(Map<String, String> env) { MariaDbEnvironment(Map<String, @Nullable String> env) {
this.username = extractUsername(env); this.username = extractUsername(env);
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = extractDatabase(env); this.database = extractDatabase(env);
} }
private String extractUsername(Map<String, String> env) { private String extractUsername(Map<String, @Nullable String> env) {
String user = env.get("MARIADB_USER"); String user = env.get("MARIADB_USER");
return (user != null) ? user : env.getOrDefault("MYSQL_USER", "root"); return (user != null) ? user : env.getOrDefault("MYSQL_USER", "root");
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
Assert.state(!env.containsKey("MARIADB_RANDOM_ROOT_PASSWORD"), "MARIADB_RANDOM_ROOT_PASSWORD is not supported"); 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("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"); 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 : ""; return (password != null) ? password : "";
} }
private String extractDatabase(Map<String, String> env) { private String extractDatabase(Map<String, @Nullable String> env) {
String database = env.get("MARIADB_DATABASE"); String database = env.get("MARIADB_DATABASE");
database = (database != null) ? database : env.get("MYSQL_DATABASE"); database = (database != null) ? database : env.get("MYSQL_DATABASE");
Assert.state(database != null, "No MARIADB_DATABASE defined"); Assert.state(database != null, "No MARIADB_DATABASE defined");

8
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -37,13 +39,13 @@ class MySqlEnvironment {
private final String database; private final String database;
MySqlEnvironment(Map<String, String> env) { MySqlEnvironment(Map<String, @Nullable String> env) {
this.username = env.getOrDefault("MYSQL_USER", "root"); this.username = env.getOrDefault("MYSQL_USER", "root");
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = extractDatabase(env); this.database = extractDatabase(env);
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
Assert.state(!env.containsKey("MYSQL_RANDOM_ROOT_PASSWORD"), "MYSQL_RANDOM_ROOT_PASSWORD is not supported"); 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"); boolean allowEmpty = env.containsKey("MYSQL_ALLOW_EMPTY_PASSWORD") || env.containsKey("ALLOW_EMPTY_PASSWORD");
String password = env.get("MYSQL_PASSWORD"); String password = env.get("MYSQL_PASSWORD");
@ -52,7 +54,7 @@ class MySqlEnvironment {
return (password != null) ? password : ""; return (password != null) ? password : "";
} }
private String extractDatabase(Map<String, String> env) { private String extractDatabase(Map<String, @Nullable String> env) {
String database = env.get("MYSQL_DATABASE"); String database = env.get("MYSQL_DATABASE");
Assert.state(database != null, "No MYSQL_DATABASE defined"); Assert.state(database != null, "No MYSQL_DATABASE defined");
return database; return database;

6
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -34,13 +36,13 @@ class OracleEnvironment {
private final String database; private final String database;
OracleEnvironment(Map<String, String> env, String defaultDatabase) { OracleEnvironment(Map<String, @Nullable String> env, String defaultDatabase) {
this.username = env.getOrDefault("APP_USER", "system"); this.username = env.getOrDefault("APP_USER", "system");
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = env.getOrDefault("ORACLE_DATABASE", defaultDatabase); this.database = env.getOrDefault("ORACLE_DATABASE", defaultDatabase);
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
if (env.containsKey("APP_USER")) { if (env.containsKey("APP_USER")) {
String password = env.get("APP_USER_PASSWORD"); String password = env.get("APP_USER_PASSWORD");
Assert.state(StringUtils.hasLength(password), "No Oracle app password found"); Assert.state(StringUtils.hasLength(password), "No Oracle app password found");

8
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; private final String database;
PostgresEnvironment(Map<String, String> env) { PostgresEnvironment(Map<String, @Nullable String> env) {
this.username = extract(env, USERNAME_KEYS, DEFAULT_USERNAME); this.username = extract(env, USERNAME_KEYS, DEFAULT_USERNAME);
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = extract(env, DATABASE_KEYS, this.username); this.database = extract(env, DATABASE_KEYS, this.username);
} }
private String extract(Map<String, String> env, String[] keys, String defaultValue) { private String extract(Map<String, @Nullable String> env, String[] keys, String defaultValue) {
for (String key : keys) { for (String key : keys) {
if (env.containsKey(key)) { if (env.containsKey(key)) {
return env.get(key); return env.get(key);
@ -64,7 +64,7 @@ class PostgresEnvironment {
return defaultValue; return defaultValue;
} }
private @Nullable String extractPassword(Map<String, String> env) { private @Nullable String extractPassword(Map<String, @Nullable String> env) {
if (isUsingTrustHostAuthMethod(env)) { if (isUsingTrustHostAuthMethod(env)) {
return null; return null;
} }
@ -74,7 +74,7 @@ class PostgresEnvironment {
return (password != null) ? password : ""; return (password != null) ? password : "";
} }
private boolean isUsingTrustHostAuthMethod(Map<String, String> env) { private boolean isUsingTrustHostAuthMethod(Map<String, @Nullable String> env) {
String hostAuthMethod = env.get("POSTGRES_HOST_AUTH_METHOD"); String hostAuthMethod = env.get("POSTGRES_HOST_AUTH_METHOD");
return "trust".equals(hostAuthMethod); return "trust".equals(hostAuthMethod);
} }

6
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -32,11 +34,11 @@ class SqlServerEnvironment {
private final String password; private final String password;
SqlServerEnvironment(Map<String, String> env) { SqlServerEnvironment(Map<String, @Nullable String> env) {
this.password = extractPassword(env); this.password = extractPassword(env);
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
String password = env.get("MSSQL_SA_PASSWORD"); String password = env.get("MSSQL_SA_PASSWORD");
password = (password != null) ? password : env.get("SA_PASSWORD"); password = (password != null) ? password : env.get("SA_PASSWORD");
Assert.state(StringUtils.hasLength(password), "No MSSQL password found"); Assert.state(StringUtils.hasLength(password), "No MSSQL password found");

4
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.docker.compose.core.RunningService; 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.DockerComposeConnectionDetailsFactory;
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource; import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
@ -56,7 +58,7 @@ class LLdapDockerComposeConnectionDetailsFactory extends DockerComposeConnection
LLdapDockerComposeConnectionDetails(RunningService service) { LLdapDockerComposeConnectionDetails(RunningService service) {
super(service); super(service);
Map<String, String> env = service.env(); Map<String, @Nullable String> env = service.env();
boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LLDAP_LDAPS_OPTIONS__ENABLED", "false")); boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LLDAP_LDAPS_OPTIONS__ENABLED", "false"));
String ldapPort = usesTls ? env.getOrDefault("LLDAP_LDAPS_OPTIONS__PORT", "6360") String ldapPort = usesTls ? env.getOrDefault("LLDAP_LDAPS_OPTIONS__PORT", "6360")
: env.getOrDefault("LLDAP_LDAP_PORT", "3890"); : env.getOrDefault("LLDAP_LDAP_PORT", "3890");

4
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.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.jspecify.annotations.Nullable;
import org.springframework.boot.docker.compose.core.RunningService; 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.DockerComposeConnectionDetailsFactory;
import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource; import org.springframework.boot.docker.compose.service.connection.DockerComposeConnectionSource;
@ -59,7 +61,7 @@ class OpenLdapDockerComposeConnectionDetailsFactory
OpenLdapDockerComposeConnectionDetails(RunningService service) { OpenLdapDockerComposeConnectionDetails(RunningService service) {
super(service); super(service);
Map<String, String> env = service.env(); Map<String, @Nullable String> env = service.env();
boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LDAP_TLS", "true")); boolean usesTls = Boolean.parseBoolean(env.getOrDefault("LDAP_TLS", "true"));
String ldapPort = usesTls ? env.getOrDefault("LDAPS_PORT", "636") : env.getOrDefault("LDAP_PORT", "389"); 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(), this.urls = new String[] { "%s://%s:%d".formatted(usesTls ? "ldaps" : "ldap", service.host(),

2
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; private final @Nullable String database;
MongoEnvironment(Map<String, String> env) { MongoEnvironment(Map<String, @Nullable String> env) {
Assert.state(!env.containsKey("MONGO_INITDB_ROOT_USERNAME_FILE"), Assert.state(!env.containsKey("MONGO_INITDB_ROOT_USERNAME_FILE"),
"MONGO_INITDB_ROOT_USERNAME_FILE is not supported"); "MONGO_INITDB_ROOT_USERNAME_FILE is not supported");
Assert.state(!env.containsKey("MONGO_INITDB_ROOT_PASSWORD_FILE"), Assert.state(!env.containsKey("MONGO_INITDB_ROOT_PASSWORD_FILE"),

2
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; private final @Nullable AuthToken authToken;
Neo4jEnvironment(Map<String, String> env) { Neo4jEnvironment(Map<String, @Nullable String> env) {
AuthToken authToken = parse(env.get("NEO4J_AUTH")); AuthToken authToken = parse(env.get("NEO4J_AUTH"));
if (authToken == null && env.containsKey("NEO4J_PASSWORD")) { if (authToken == null && env.containsKey("NEO4J_PASSWORD")) {
authToken = parse("neo4j/" + env.get("NEO4J_PASSWORD")); authToken = parse("neo4j/" + env.get("NEO4J_PASSWORD"));

6
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -34,13 +36,13 @@ class ClickHouseEnvironment {
private final String database; private final String database;
ClickHouseEnvironment(Map<String, String> env) { ClickHouseEnvironment(Map<String, @Nullable String> env) {
this.username = env.getOrDefault("CLICKHOUSE_USER", "default"); this.username = env.getOrDefault("CLICKHOUSE_USER", "default");
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = env.getOrDefault("CLICKHOUSE_DB", "default"); this.database = env.getOrDefault("CLICKHOUSE_DB", "default");
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD"); boolean allowEmpty = env.containsKey("ALLOW_EMPTY_PASSWORD");
String password = env.get("CLICKHOUSE_PASSWORD"); String password = env.get("CLICKHOUSE_PASSWORD");
Assert.state(StringUtils.hasLength(password) || allowEmpty, "No ClickHouse password found"); Assert.state(StringUtils.hasLength(password) || allowEmpty, "No ClickHouse password found");

10
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -37,18 +39,18 @@ class MariaDbEnvironment {
private final String database; private final String database;
MariaDbEnvironment(Map<String, String> env) { MariaDbEnvironment(Map<String, @Nullable String> env) {
this.username = extractUsername(env); this.username = extractUsername(env);
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = extractDatabase(env); this.database = extractDatabase(env);
} }
private String extractUsername(Map<String, String> env) { private String extractUsername(Map<String, @Nullable String> env) {
String user = env.get("MARIADB_USER"); String user = env.get("MARIADB_USER");
return (user != null) ? user : env.getOrDefault("MYSQL_USER", "root"); return (user != null) ? user : env.getOrDefault("MYSQL_USER", "root");
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
Assert.state(!env.containsKey("MARIADB_RANDOM_ROOT_PASSWORD"), "MARIADB_RANDOM_ROOT_PASSWORD is not supported"); 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("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"); 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 : ""; return (password != null) ? password : "";
} }
private String extractDatabase(Map<String, String> env) { private String extractDatabase(Map<String, @Nullable String> env) {
String database = env.get("MARIADB_DATABASE"); String database = env.get("MARIADB_DATABASE");
database = (database != null) ? database : env.get("MYSQL_DATABASE"); database = (database != null) ? database : env.get("MYSQL_DATABASE");
Assert.state(database != null, "No MARIADB_DATABASE defined"); Assert.state(database != null, "No MARIADB_DATABASE defined");

8
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -37,13 +39,13 @@ class MySqlEnvironment {
private final String database; private final String database;
MySqlEnvironment(Map<String, String> env) { MySqlEnvironment(Map<String, @Nullable String> env) {
this.username = env.getOrDefault("MYSQL_USER", "root"); this.username = env.getOrDefault("MYSQL_USER", "root");
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = extractDatabase(env); this.database = extractDatabase(env);
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
Assert.state(!env.containsKey("MYSQL_RANDOM_ROOT_PASSWORD"), "MYSQL_RANDOM_ROOT_PASSWORD is not supported"); 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"); boolean allowEmpty = env.containsKey("MYSQL_ALLOW_EMPTY_PASSWORD") || env.containsKey("ALLOW_EMPTY_PASSWORD");
String password = env.get("MYSQL_PASSWORD"); String password = env.get("MYSQL_PASSWORD");
@ -52,7 +54,7 @@ class MySqlEnvironment {
return (password != null) ? password : ""; return (password != null) ? password : "";
} }
private String extractDatabase(Map<String, String> env) { private String extractDatabase(Map<String, @Nullable String> env) {
String database = env.get("MYSQL_DATABASE"); String database = env.get("MYSQL_DATABASE");
Assert.state(database != null, "No MYSQL_DATABASE defined"); Assert.state(database != null, "No MYSQL_DATABASE defined");
return database; return database;

6
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -34,13 +36,13 @@ class OracleEnvironment {
private final String database; private final String database;
OracleEnvironment(Map<String, String> env, String defaultDatabase) { OracleEnvironment(Map<String, @Nullable String> env, String defaultDatabase) {
this.username = env.getOrDefault("APP_USER", "system"); this.username = env.getOrDefault("APP_USER", "system");
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = env.getOrDefault("ORACLE_DATABASE", defaultDatabase); this.database = env.getOrDefault("ORACLE_DATABASE", defaultDatabase);
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
if (env.containsKey("APP_USER")) { if (env.containsKey("APP_USER")) {
String password = env.get("APP_USER_PASSWORD"); String password = env.get("APP_USER_PASSWORD");
Assert.state(StringUtils.hasLength(password), "No Oracle app password found"); Assert.state(StringUtils.hasLength(password), "No Oracle app password found");

8
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; private final String database;
PostgresEnvironment(Map<String, String> env) { PostgresEnvironment(Map<String, @Nullable String> env) {
this.username = extract(env, USERNAME_KEYS, DEFAULT_USERNAME); this.username = extract(env, USERNAME_KEYS, DEFAULT_USERNAME);
this.password = extractPassword(env); this.password = extractPassword(env);
this.database = extract(env, DATABASE_KEYS, this.username); this.database = extract(env, DATABASE_KEYS, this.username);
} }
private String extract(Map<String, String> env, String[] keys, String defaultValue) { private String extract(Map<String, @Nullable String> env, String[] keys, String defaultValue) {
for (String key : keys) { for (String key : keys) {
if (env.containsKey(key)) { if (env.containsKey(key)) {
return env.get(key); return env.get(key);
@ -64,7 +64,7 @@ class PostgresEnvironment {
return defaultValue; return defaultValue;
} }
private @Nullable String extractPassword(Map<String, String> env) { private @Nullable String extractPassword(Map<String, @Nullable String> env) {
if (isUsingTrustHostAuthMethod(env)) { if (isUsingTrustHostAuthMethod(env)) {
return null; return null;
} }
@ -74,7 +74,7 @@ class PostgresEnvironment {
return (password != null) ? password : ""; return (password != null) ? password : "";
} }
private boolean isUsingTrustHostAuthMethod(Map<String, String> env) { private boolean isUsingTrustHostAuthMethod(Map<String, @Nullable String> env) {
String hostAuthMethod = env.get("POSTGRES_HOST_AUTH_METHOD"); String hostAuthMethod = env.get("POSTGRES_HOST_AUTH_METHOD");
return "trust".equals(hostAuthMethod); return "trust".equals(hostAuthMethod);
} }

6
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 java.util.Map;
import org.jspecify.annotations.Nullable;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@ -32,11 +34,11 @@ class SqlServerEnvironment {
private final String password; private final String password;
SqlServerEnvironment(Map<String, String> env) { SqlServerEnvironment(Map<String, @Nullable String> env) {
this.password = extractPassword(env); this.password = extractPassword(env);
} }
private String extractPassword(Map<String, String> env) { private String extractPassword(Map<String, @Nullable String> env) {
String password = env.get("MSSQL_SA_PASSWORD"); String password = env.get("MSSQL_SA_PASSWORD");
password = (password != null) ? password : env.get("SA_PASSWORD"); password = (password != null) ? password : env.get("SA_PASSWORD");
Assert.state(StringUtils.hasLength(password), "No MSSQL password found"); Assert.state(StringUtils.hasLength(password), "No MSSQL password found");

Loading…
Cancel
Save