This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git

commit a29dc5880287ad41c0c0a66434a7266d6f63382b
Author: Prithvi S <[email protected]>
AuthorDate: Sat Jul 18 19:05:30 2026 +0530

    used EnvUtils for system properties in core (#4629)
    
    Can use either system properties or environment variables.
    
    Co-authored-by: Eric Pugh <[email protected]>
    (cherry picked from commit c0baa496c23fbb44d0818efed8d5f113cfeddea2)
---
 .../PR#4629-envutils-core-properties.yml           |  7 ++++++
 .../org/apache/solr/cli/ConfigSetUploadTool.java   |  3 ++-
 .../src/java/org/apache/solr/cli/CreateTool.java   |  5 +++--
 .../core/src/java/org/apache/solr/cli/SolrCLI.java |  5 +++--
 .../src/java/org/apache/solr/cli/ZkCpTool.java     |  3 ++-
 .../java/org/apache/solr/cloud/SolrZkServer.java   |  4 ++--
 .../impl/PlacementPluginFactoryLoader.java         |  3 ++-
 .../org/apache/solr/core/ConfigSetService.java     |  6 +++---
 .../java/org/apache/solr/core/CoreContainer.java   | 25 ++++++++++++----------
 .../src/java/org/apache/solr/core/NodeConfig.java  |  4 ++--
 .../solr/core/OpenTelemetryConfigurator.java       |  2 +-
 .../java/org/apache/solr/core/SolrXmlConfig.java   |  4 ++--
 .../src/java/org/apache/solr/core/ZkContainer.java |  2 +-
 .../apache/solr/handler/admin/SolrEnvironment.java |  5 +++--
 .../handler/component/HttpShardHandlerFactory.java |  3 ++-
 .../apache/solr/servlet/CoreContainerProvider.java | 10 ++++-----
 .../apache/solr/servlet/LoadAdminUiServlet.java    |  6 +++---
 .../org/apache/solr/util/FileTypeMagicUtil.java    |  3 ++-
 .../org/apache/solr/util/StartupLoggingUtils.java  |  6 ++++--
 .../solr/util/circuitbreaker/CircuitBreaker.java   |  2 +-
 .../circuitbreaker/CircuitBreakerRegistry.java     |  2 +-
 .../solr/util/configuration/SSLConfigurations.java |  5 +++--
 .../SSLCredentialProviderFactory.java              |  3 ++-
 .../providers/SysPropSSLCredentialProvider.java    |  7 ++----
 .../apache/solr/util/tracing/SimplePropagator.java |  5 +++--
 25 files changed, 75 insertions(+), 55 deletions(-)

diff --git a/changelog/unreleased/PR#4629-envutils-core-properties.yml 
b/changelog/unreleased/PR#4629-envutils-core-properties.yml
new file mode 100644
index 00000000000..f700119fe1b
--- /dev/null
+++ b/changelog/unreleased/PR#4629-envutils-core-properties.yml
@@ -0,0 +1,7 @@
+title: Core system properties can now also be configured via environment 
variables
+type: changed
+authors:
+  - name: Prithvi S
+links:
+  - name: PR#4629
+    url: https://github.com/apache/solr/pull/4629
diff --git a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java 
b/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
index fdd2380f3a1..71daf15d338 100644
--- a/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ConfigSetUploadTool.java
@@ -23,6 +23,7 @@ import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkMaintenanceUtils;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.core.ConfigSetService;
 import org.apache.solr.util.FileTypeMagicUtil;
 import org.slf4j.Logger;
@@ -77,7 +78,7 @@ public class ConfigSetUploadTool extends ToolBase {
   public void runImpl(CommandLine cli) throws Exception {
     String zkHost = CLIUtils.getZkHost(cli);
 
-    final String solrInstallDir = System.getProperty("solr.install.dir");
+    final String solrInstallDir = EnvUtils.getProperty("solr.install.dir");
     Path solrInstallDirPath = Path.of(solrInstallDir);
 
     String confName = cli.getOptionValue(CONF_NAME_OPTION);
diff --git a/solr/core/src/java/org/apache/solr/cli/CreateTool.java 
b/solr/core/src/java/org/apache/solr/cli/CreateTool.java
index 036297d8d53..9878c6b9890 100644
--- a/solr/core/src/java/org/apache/solr/cli/CreateTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/CreateTool.java
@@ -40,6 +40,7 @@ import 
org.apache.solr.client.solrj.response.SystemInfoResponse;
 import org.apache.solr.client.solrj.response.json.JsonMapResponseParser;
 import org.apache.solr.cloud.ZkConfigSetService;
 import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.ConfigSetService;
 import org.noggit.CharArr;
@@ -140,7 +141,7 @@ public class CreateTool extends ToolBase {
     String coreName = cli.getOptionValue(COLLECTION_NAME_OPTION);
     String solrUrl = CLIUtils.normalizeSolrUrl(cli);
 
-    final String solrInstallDir = System.getProperty("solr.install.dir");
+    final String solrInstallDir = EnvUtils.getProperty("solr.install.dir");
     final String confDirName =
         cli.getOptionValue(CONF_DIR_OPTION, DefaultValues.DEFAULT_CONFIG_SET);
 
@@ -223,7 +224,7 @@ public class CreateTool extends ToolBase {
       throws Exception {
 
     String collectionName = cli.getOptionValue(COLLECTION_NAME_OPTION);
-    final String solrInstallDir = System.getProperty("solr.install.dir");
+    final String solrInstallDir = EnvUtils.getProperty("solr.install.dir");
     String confName = cli.getOptionValue(CONF_NAME_OPTION);
     String confDir = cli.getOptionValue(CONF_DIR_OPTION, 
DefaultValues.DEFAULT_CONFIG_SET);
     Path solrInstallDirPath = Path.of(solrInstallDir);
diff --git a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java 
b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
index e3458c3232b..263fb7a7da2 100755
--- a/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/cli/SolrCLI.java
@@ -45,6 +45,7 @@ import org.apache.commons.cli.help.TextHelpAppendable;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
 import org.apache.solr.common.util.ContentStreamBase;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SuppressForbidden;
 import org.apache.solr.util.configuration.SSLConfigurationsFactory;
@@ -143,7 +144,7 @@ public class SolrCLI implements CLIO {
     argList.addAll(dashDList);
 
     // for SSL support, try to accommodate relative paths set for SSL store 
props
-    String solrInstallDir = System.getProperty("solr.install.dir");
+    String solrInstallDir = EnvUtils.getProperty("solr.install.dir");
     if (solrInstallDir != null) {
       checkSslStoreSysProp(solrInstallDir, "keyStore");
       checkSslStoreSysProp(solrInstallDir, "trustStore");
@@ -154,7 +155,7 @@ public class SolrCLI implements CLIO {
 
   protected static void checkSslStoreSysProp(String solrInstallDir, String 
key) {
     String sysProp = "javax.net.ssl." + key;
-    String keyStore = System.getProperty(sysProp);
+    String keyStore = EnvUtils.getProperty(sysProp);
     if (keyStore == null) return;
 
     Path keyStoreFile = Path.of(keyStore);
diff --git a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java 
b/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
index 4bf9a266315..2edaccee9df 100644
--- a/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
+++ b/solr/core/src/java/org/apache/solr/cli/ZkCpTool.java
@@ -31,6 +31,7 @@ import org.apache.solr.client.solrj.impl.SolrZkClientTimeout;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.util.Compressor;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.common.util.ZLibCompressor;
 import org.apache.solr.core.NodeConfig;
@@ -154,7 +155,7 @@ public class ZkCpTool extends ToolBase {
     if (dstIsZk) {
       String solrHome = cli.getOptionValue(SOLR_HOME_OPTION);
       if (StrUtils.isNullOrEmpty(solrHome)) {
-        solrHome = System.getProperty("solr.home");
+        solrHome = EnvUtils.getProperty("solr.home");
       }
 
       if (solrHome != null) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/SolrZkServer.java 
b/solr/core/src/java/org/apache/solr/cloud/SolrZkServer.java
index cdd3ae90f86..3bbb010f486 100644
--- a/solr/core/src/java/org/apache/solr/cloud/SolrZkServer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/SolrZkServer.java
@@ -104,7 +104,7 @@ public class SolrZkServer {
     var zooCfgPath = Path.of(confHome).resolve("zoo.cfg");
     if (!Files.exists(zooCfgPath)) {
       log.info("Zookeeper configuration not found in {}, using built-in 
default", confHome);
-      String solrInstallDir = 
System.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
+      String solrInstallDir = 
EnvUtils.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
       if (solrInstallDir == null) {
         throw new SolrException(
             SolrException.ErrorCode.SERVER_ERROR,
@@ -142,7 +142,7 @@ public class SolrZkServer {
     }
 
     ensureZkMaxCnxnsConfigured();
-    if (System.getProperty(ZK_WHITELIST_PROPERTY) == null) {
+    if (EnvUtils.getProperty(ZK_WHITELIST_PROPERTY) == null) {
       System.setProperty(ZK_WHITELIST_PROPERTY, "ruok, mntr, conf");
     }
     AtomicReference<Exception> zkException = new AtomicReference<>();
diff --git 
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/PlacementPluginFactoryLoader.java
 
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/PlacementPluginFactoryLoader.java
index 4df4616648a..00ee44f67b3 100644
--- 
a/solr/core/src/java/org/apache/solr/cluster/placement/impl/PlacementPluginFactoryLoader.java
+++ 
b/solr/core/src/java/org/apache/solr/cluster/placement/impl/PlacementPluginFactoryLoader.java
@@ -29,6 +29,7 @@ import 
org.apache.solr.cluster.placement.plugins.MinimizeCoresPlacementFactory;
 import org.apache.solr.cluster.placement.plugins.RandomPlacementFactory;
 import org.apache.solr.cluster.placement.plugins.SimplePlacementFactory;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.EnvUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -102,7 +103,7 @@ public class PlacementPluginFactoryLoader {
   /** Returns the default {@link PlacementPluginFactory} */
   public static PlacementPluginFactory<?> getDefaultPlacementPluginFactory() {
     // Use the default provided by system properties.
-    String defaultPluginId = 
System.getProperty(PLACEMENTPLUGIN_DEFAULT_SYSPROP);
+    String defaultPluginId = 
EnvUtils.getProperty(PLACEMENTPLUGIN_DEFAULT_SYSPROP);
     if (defaultPluginId != null) {
       log.info(
           "Default replica placement plugin set in {} to {}",
diff --git a/solr/core/src/java/org/apache/solr/core/ConfigSetService.java 
b/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
index d88b15e0c44..6976e65c84b 100644
--- a/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
@@ -137,7 +137,7 @@ public abstract class ConfigSetService {
         log.warn(
             "The _default configset could not be uploaded. Please provide 
'solr.configset.default.confdir' parameter that points to a configset {} {}",
             "intended to be the default. Current 
'solr.configset.default.confdir' value:",
-            System.getProperty(SOLR_CONFIGSET_DEFAULT_CONFDIR));
+            EnvUtils.getProperty(SOLR_CONFIGSET_DEFAULT_CONFDIR));
       } else {
         this.uploadConfig(ConfigSetsHandler.DEFAULT_CONFIGSET_NAME, 
configDirPath);
       }
@@ -165,7 +165,7 @@ public abstract class ConfigSetService {
    * @see ConfigSetService#SOLR_CONFIGSET_DEFAULT_CONFDIR
    */
   public static Path getDefaultConfigDirPath() {
-    String confDir = System.getProperty(SOLR_CONFIGSET_DEFAULT_CONFDIR);
+    String confDir = EnvUtils.getProperty(SOLR_CONFIGSET_DEFAULT_CONFDIR);
     if (confDir != null) {
       Path path = Path.of(confDir);
       if (Files.exists(path)) {
@@ -173,7 +173,7 @@ public abstract class ConfigSetService {
       }
     }
 
-    String installDir = 
System.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
+    String installDir = 
EnvUtils.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
     if (installDir != null) {
       Path subPath = Path.of("server", "solr", "configsets", "_default", 
"conf");
       Path path = Path.of(installDir).resolve(subPath);
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java 
b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 0eb7b4a576c..d79c3b7b794 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -289,7 +289,7 @@ public class CoreContainer {
 
   private final ObjectCache objectCache = new ObjectCache();
 
-  public final NodeRoles nodeRoles = new 
NodeRoles(System.getProperty(NodeRoles.NODE_ROLES_PROP));
+  public final NodeRoles nodeRoles = new 
NodeRoles(EnvUtils.getProperty(NodeRoles.NODE_ROLES_PROP));
 
   private final ExecutorService indexSearcherExecutor;
 
@@ -555,14 +555,17 @@ public class CoreContainer {
 
     if (pluginClassName != null) {
       log.debug("Authentication plugin class obtained from security.json: {}", 
pluginClassName);
-    } else if (System.getProperty(AUTHENTICATION_PLUGIN_PROP) != null) {
-      pluginClassName = System.getProperty(AUTHENTICATION_PLUGIN_PROP);
-      log.debug(
-          "Authentication plugin class obtained from system property '{}': {}",
-          AUTHENTICATION_PLUGIN_PROP,
-          pluginClassName);
     } else {
-      log.debug("No authentication plugin used.");
+      String authPluginProp = EnvUtils.getProperty(AUTHENTICATION_PLUGIN_PROP);
+      if (authPluginProp != null) {
+        pluginClassName = authPluginProp;
+        log.debug(
+            "Authentication plugin class obtained from system property '{}': 
{}",
+            AUTHENTICATION_PLUGIN_PROP,
+            pluginClassName);
+      } else {
+        log.debug("No authentication plugin used.");
+      }
     }
     SecurityPluginHolder<AuthenticationPlugin> old = authenticationPlugin;
     SecurityPluginHolder<AuthenticationPlugin> authenticationPlugin = null;
@@ -1140,7 +1143,7 @@ public class CoreContainer {
     }
 
     if (authenticationPlugin != null
-        && 
StrUtils.isNullOrEmpty(System.getProperty("solr.jetty.https.port"))) {
+        && 
StrUtils.isNullOrEmpty(EnvUtils.getProperty("solr.jetty.https.port"))) {
       log.warn(
           "Solr authentication is enabled, but SSL is off.  Consider enabling 
SSL to protect user credentials and data with encryption.");
     }
@@ -1767,7 +1770,7 @@ public class CoreContainer {
 
     CoreInitFailedAction action =
         CoreInitFailedAction.valueOf(
-            System.getProperty(CoreInitFailedAction.class.getSimpleName(), 
"none"));
+            EnvUtils.getProperty(CoreInitFailedAction.class.getSimpleName(), 
"none"));
     log.debug("CorruptIndexException while creating core, will attempt to 
repair via {}", action);
 
     switch (action) {
@@ -2499,7 +2502,7 @@ public class CoreContainer {
   }
 
   public static void setWeakStringInterner() {
-    boolean enable = "true".equals(System.getProperty("solr.use.str.intern", 
"true"));
+    boolean enable = "true".equals(EnvUtils.getProperty("solr.use.str.intern", 
"true"));
     if (!enable) return;
     Interner<String> interner = Interner.newWeakInterner();
     ClusterState.setStrInternerParser(
diff --git a/solr/core/src/java/org/apache/solr/core/NodeConfig.java 
b/solr/core/src/java/org/apache/solr/core/NodeConfig.java
index 1634c2c29e8..53e9a07315b 100644
--- a/solr/core/src/java/org/apache/solr/core/NodeConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/NodeConfig.java
@@ -294,7 +294,7 @@ public class NodeConfig {
    * @return path to install dir or null if solr.install.dir not set.
    */
   public static Path getSolrInstallDir() {
-    String prop = System.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
+    String prop = EnvUtils.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
     if (prop == null || prop.isBlank()) {
       log.debug("solr.install.dir property not initialized.");
       return null;
@@ -644,7 +644,7 @@ public class NodeConfig {
       this.solrHome = solrHome.toAbsolutePath();
       this.coreRootDirectory = solrHome;
       // always init from sysprop because <solrDataHome> config element may be 
missing
-      setSolrDataHome(System.getProperty(SolrXmlConfig.SOLR_DATA_HOME));
+      setSolrDataHome(EnvUtils.getProperty(SolrXmlConfig.SOLR_DATA_HOME));
       setConfigSetBaseDirectory("configsets");
       this.metricsConfig = new MetricsConfig.MetricsConfigBuilder().build();
     }
diff --git 
a/solr/core/src/java/org/apache/solr/core/OpenTelemetryConfigurator.java 
b/solr/core/src/java/org/apache/solr/core/OpenTelemetryConfigurator.java
index 1be4b0deb6b..b134877c8e7 100644
--- a/solr/core/src/java/org/apache/solr/core/OpenTelemetryConfigurator.java
+++ b/solr/core/src/java/org/apache/solr/core/OpenTelemetryConfigurator.java
@@ -160,7 +160,7 @@ public abstract class OpenTelemetryConfigurator implements 
NamedListInitializedP
    */
   protected static String getConfig(String envName, Map<String, String> env) {
     String sysName = envNameToSyspropName(envName);
-    String sysValue = System.getProperty(sysName);
+    String sysValue = EnvUtils.getProperty(sysName);
     String envValue = env.get(envName);
     return sysValue != null ? sysValue : envValue;
   }
diff --git a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java 
b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
index c4b801a28bc..aa9ba040bf9 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
@@ -87,7 +87,7 @@ public class SolrXmlConfig {
     }
     // we always wrap if we might set a property -- never mutate the original 
props
     final Properties results = (null == props ? new Properties() : new 
Properties(props));
-    final String sysprop = System.getProperty(ZK_HOST);
+    final String sysprop = EnvUtils.getProperty(ZK_HOST);
     if (StrUtils.isNotNullOrEmpty(sysprop)) {
       results.setProperty(ZK_HOST, sysprop);
     }
@@ -179,7 +179,7 @@ public class SolrXmlConfig {
             "solr.xml does not exist in " + configFile.getParent() + " cannot 
start Solr");
       }
       log.info("solr.xml not found in SOLR_HOME, using built-in default");
-      String solrInstallDir = 
System.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
+      String solrInstallDir = 
EnvUtils.getProperty(CoreContainerProvider.SOLR_INSTALL_DIR);
       if (solrInstallDir == null) {
         throw new SolrException(
             SolrException.ErrorCode.SERVER_ERROR,
diff --git a/solr/core/src/java/org/apache/solr/core/ZkContainer.java 
b/solr/core/src/java/org/apache/solr/core/ZkContainer.java
index a0c2ae569d5..70e4f33bb76 100644
--- a/solr/core/src/java/org/apache/solr/core/ZkContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/ZkContainer.java
@@ -134,7 +134,7 @@ public class ZkContainer {
             new ZkController(cc, zookeeperHost, zkClientConnectTimeout, 
config);
 
         if (zkRun) {
-          if (StrUtils.isNotNullOrEmpty(System.getProperty(HTTPS_PORT_PROP))) {
+          if 
(StrUtils.isNotNullOrEmpty(EnvUtils.getProperty(HTTPS_PORT_PROP))) {
             // Embedded ZK and probably running with SSL
             new ClusterProperties(zkController.getZkClient())
                 .setClusterProperty(ZkStateReader.URL_SCHEME, HTTPS);
diff --git 
a/solr/core/src/java/org/apache/solr/handler/admin/SolrEnvironment.java 
b/solr/core/src/java/org/apache/solr/handler/admin/SolrEnvironment.java
index 1d289ce0422..c3a297b33f4 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SolrEnvironment.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SolrEnvironment.java
@@ -21,6 +21,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.util.EnvUtils;
 
 /**
  * It is possible to define an environment code when starting Solr, through
@@ -87,8 +88,8 @@ public class SolrEnvironment {
    */
   public static SolrEnvironment getFromSyspropOrClusterprop(ZkStateReader 
zkStateReader) {
     String env = "unknown";
-    if (System.getProperty("solr.environment") != null) {
-      env = System.getProperty("solr.environment");
+    if (EnvUtils.getProperty("solr.environment") != null) {
+      env = EnvUtils.getProperty("solr.environment");
     } else if (zkStateReader != null) {
       env = zkStateReader.getClusterProperty("environment", "unknown");
     }
diff --git 
a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
 
b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
index 574a0b266a3..8fb82603629 100644
--- 
a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
+++ 
b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
@@ -445,7 +445,8 @@ public class HttpShardHandlerFactory extends 
ShardHandlerFactory
     if (isSolrSslEnabled != null) {
       return isSolrSslEnabled ? "https" : "http";
     }
-    String urlScheme = getParameter(args, INIT_URL_SCHEME, 
System.getProperty(INIT_URL_SCHEME), sb);
+    String urlScheme =
+        getParameter(args, INIT_URL_SCHEME, 
EnvUtils.getProperty(INIT_URL_SCHEME), sb);
     if (urlScheme != null && urlScheme.endsWith("://")) {
       urlScheme = urlScheme.replace("://", "");
     }
diff --git 
a/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java 
b/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java
index 19d06f392b7..6e1446a9397 100644
--- a/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java
+++ b/solr/core/src/java/org/apache/solr/servlet/CoreContainerProvider.java
@@ -153,13 +153,13 @@ public class CoreContainerProvider implements 
ServletContextListener {
 
       logWelcomeBanner(extraProperties);
 
-      String muteConsole = System.getProperty(SOLR_LOG_MUTECONSOLE);
+      String muteConsole = EnvUtils.getProperty(SOLR_LOG_MUTECONSOLE);
       if (muteConsole != null
           && !Arrays.asList("false", "0", "off", "no")
               .contains(muteConsole.toLowerCase(Locale.ROOT))) {
         StartupLoggingUtils.muteConsole();
       }
-      String logLevel = System.getProperty(SOLR_LOG_LEVEL);
+      String logLevel = EnvUtils.getProperty(SOLR_LOG_LEVEL);
       if (logLevel != null) {
         log.info("Log level override, property solr.log.level={}", logLevel);
         StartupLoggingUtils.changeLogLevel(logLevel);
@@ -208,7 +208,7 @@ public class CoreContainerProvider implements 
ServletContextListener {
           getSolrPort());
     }
     if (log.isInfoEnabled()) {
-      log.info("\\__ \\/ _ \\ | '_|  Install dir: {}", 
System.getProperty(SOLR_INSTALL_DIR));
+      log.info("\\__ \\/ _ \\ | '_|  Install dir: {}", 
EnvUtils.getProperty(SOLR_INSTALL_DIR));
     }
     if (log.isInfoEnabled()) {
       log.info("|___/\\___/_|_|    Start time: {}", Instant.now());
@@ -241,7 +241,7 @@ public class CoreContainerProvider implements 
ServletContextListener {
               "Solr typically starts with \"-XX:+CrashOnOutOfMemoryError\" 
that will crash on any OutOfMemoryError exception. "
                   + "Unable to get the specific file due to an exception."
                   + "The cause of the OOME will be logged in a crash file in 
the logs directory: %s",
-              System.getProperty("solr.logs.dir"));
+              EnvUtils.getProperty("solr.logs.dir"));
       log.info(logMessage, e);
     }
   }
@@ -316,7 +316,7 @@ public class CoreContainerProvider implements 
ServletContextListener {
       // Now try system property
       final String prop = "solr.solr.home";
       source = "system property: " + prop;
-      home = System.getProperty(prop);
+      home = EnvUtils.getProperty(prop);
     }
 
     if (null == home) {
diff --git a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java 
b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
index 316e0eb59ca..83b5ef3fd8e 100644
--- a/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
+++ b/solr/core/src/java/org/apache/solr/servlet/LoadAdminUiServlet.java
@@ -30,6 +30,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import org.apache.commons.io.output.CloseShieldOutputStream;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.core.SolrCore;
 
 /**
@@ -40,8 +41,7 @@ import org.apache.solr.core.SolrCore;
 public final class LoadAdminUiServlet extends HttpServlet {
 
   // check system properties for whether the admin UI is disabled, default is 
false
-  private static final boolean uiEnabled =
-      Boolean.parseBoolean(System.getProperty("solr.ui.enabled", "true"));
+  private static final boolean uiEnabled = 
EnvUtils.getPropertyAsBool("solr.ui.enabled", true);
   // list of comma separated URLs to inject into the CSP connect-src directive
   public static final String SYSPROP_CSP_CONNECT_SRC_URLS = 
"solr.ui.headers.csp.connect-src.urls";
 
@@ -107,7 +107,7 @@ public final class LoadAdminUiServlet extends HttpServlet {
    * concatenate them into a space-separated string that can be used in CSP 
connect-src directive
    */
   private String generateCspConnectSrc() {
-    String cspURLs = System.getProperty(SYSPROP_CSP_CONNECT_SRC_URLS, "");
+    String cspURLs = EnvUtils.getProperty(SYSPROP_CSP_CONNECT_SRC_URLS, "");
     List<String> props = new ArrayList<>(Arrays.asList(cspURLs.split(",")));
     props.add("'self'");
     return String.join(" ", props);
diff --git a/solr/core/src/java/org/apache/solr/util/FileTypeMagicUtil.java 
b/solr/core/src/java/org/apache/solr/util/FileTypeMagicUtil.java
index f9e349b3f25..c803ec18469 100644
--- a/solr/core/src/java/org/apache/solr/util/FileTypeMagicUtil.java
+++ b/solr/core/src/java/org/apache/solr/util/FileTypeMagicUtil.java
@@ -32,6 +32,7 @@ import java.util.HashSet;
 import java.util.Locale;
 import java.util.Set;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.EnvUtils;
 
 /** Utility class to guess the mime type of file based on its magic number. */
 public class FileTypeMagicUtil implements ContentInfoUtil.ErrorCallBack {
@@ -194,7 +195,7 @@ public class FileTypeMagicUtil implements 
ContentInfoUtil.ErrorCallBack {
   private static final Set<String> forbiddenTypes =
       new HashSet<>(
           Arrays.asList(
-              System.getProperty(
+              EnvUtils.getProperty(
                       "solr.configset.upload.mimetypes.forbidden",
                       
"application/x-java-applet,application/zip,application/x-tar,text/x-shellscript")
                   .split(",")));
diff --git a/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java 
b/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java
index 8fbebffcdd3..5c76d4882fb 100644
--- a/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/StartupLoggingUtils.java
@@ -210,9 +210,11 @@ public final class StartupLoggingUtils {
    * "solr.logs.requestlog.enabled is set in 
solr/server/etc/jetty-requestlog.xml
    */
   public static void checkRequestLogging() {
-    // EnvUtils doesn't work here.
+    // Note: "solr.logs.requestlog.enabled" is deliberately excluded from 
EnvUtils
+    // env var mapping (see EnvToSyspropMappings.properties), so 
Boolean.getBoolean
+    // is the correct way to read it (it only looks at system properties).
     boolean requestLogEnabled = 
Boolean.getBoolean("solr.logs.requestlog.enabled");
-    String retainDays = System.getProperty("solr.logs.requestlog.retain.days");
+    String retainDays = 
EnvUtils.getProperty("solr.logs.requestlog.retain.days");
     if (requestLogEnabled) {
       if (retainDays == null) {
         log.warn(
diff --git 
a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java 
b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java
index e0829e6857b..dbab15f9800 100644
--- a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java
+++ b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreaker.java
@@ -83,7 +83,7 @@ public abstract class CircuitBreaker implements 
NamedListInitializedPlugin, Clos
 
   private static SolrException.ErrorCode resolveExceptionErrorCode() {
     int intCode = SolrException.ErrorCode.TOO_MANY_REQUESTS.code;
-    String strCode = System.getProperty(SYSPROP_SOLR_CIRCUITBREAKER_ERRORCODE);
+    String strCode = 
EnvUtils.getProperty(SYSPROP_SOLR_CIRCUITBREAKER_ERRORCODE);
     if (strCode != null) {
       try {
         intCode = Integer.parseInt(strCode);
diff --git 
a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
 
b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
index 16b2f9c752d..a86f2381719 100644
--- 
a/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
+++ 
b/solr/core/src/java/org/apache/solr/util/circuitbreaker/CircuitBreakerRegistry.java
@@ -128,7 +128,7 @@ public class CircuitBreakerRegistry implements Closeable {
 
   private static String buildCircuitBreakerKey(String metricType, String 
thresholdProp) {
     final var warnOnly = EnvUtils.getProperty(thresholdProp + 
SYSPROP_WARN_ONLY_SUFFIX, "false");
-    return metricType + ":" + System.getProperty(thresholdProp) + ":" + 
warnOnly;
+    return metricType + ":" + EnvUtils.getProperty(thresholdProp) + ":" + 
warnOnly;
   }
 
   private static synchronized void initGlobal(CoreContainer coreContainer) {
diff --git 
a/solr/core/src/java/org/apache/solr/util/configuration/SSLConfigurations.java 
b/solr/core/src/java/org/apache/solr/util/configuration/SSLConfigurations.java
index 5d5758b7948..90663bd313b 100644
--- 
a/solr/core/src/java/org/apache/solr/util/configuration/SSLConfigurations.java
+++ 
b/solr/core/src/java/org/apache/solr/util/configuration/SSLConfigurations.java
@@ -19,6 +19,7 @@ package org.apache.solr.util.configuration;
 
 import java.lang.invoke.MethodHandles;
 import java.util.List;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.common.util.StrUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,7 +61,7 @@ public class SSLConfigurations {
     String clientTruststorePassword = getClientTrustStorePassword();
     String truststorePassword = getTrustStorePassword();
 
-    if 
(StrUtils.isNullOrEmpty(System.getProperty(SysProps.SSL_CLIENT_KEY_STORE_PASSWORD))
+    if 
(StrUtils.isNullOrEmpty(EnvUtils.getProperty(SysProps.SSL_CLIENT_KEY_STORE_PASSWORD))
         && !(StrUtils.isNullOrEmpty(clientKeystorePassword)
             && StrUtils.isNullOrEmpty(keystorePassword))) {
       log.info("Setting {}", SysProps.SSL_CLIENT_KEY_STORE_PASSWORD);
@@ -68,7 +69,7 @@ public class SSLConfigurations {
           SysProps.SSL_CLIENT_KEY_STORE_PASSWORD,
           clientKeystorePassword != null ? clientKeystorePassword : 
keystorePassword);
     }
-    if 
(StrUtils.isNullOrEmpty(System.getProperty(SysProps.SSL_CLIENT_TRUST_STORE_PASSWORD))
+    if 
(StrUtils.isNullOrEmpty(EnvUtils.getProperty(SysProps.SSL_CLIENT_TRUST_STORE_PASSWORD))
         && !(StrUtils.isNullOrEmpty(clientTruststorePassword)
             && StrUtils.isNullOrEmpty(truststorePassword))) {
       log.info("Setting {}", SysProps.SSL_CLIENT_TRUST_STORE_PASSWORD);
diff --git 
a/solr/core/src/java/org/apache/solr/util/configuration/SSLCredentialProviderFactory.java
 
b/solr/core/src/java/org/apache/solr/util/configuration/SSLCredentialProviderFactory.java
index a0c79eec230..74ae38d1c54 100644
--- 
a/solr/core/src/java/org/apache/solr/util/configuration/SSLCredentialProviderFactory.java
+++ 
b/solr/core/src/java/org/apache/solr/util/configuration/SSLCredentialProviderFactory.java
@@ -23,6 +23,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.util.configuration.providers.EnvSSLCredentialProvider;
 import 
org.apache.solr.util.configuration.providers.SysPropSSLCredentialProvider;
 import org.slf4j.Logger;
@@ -42,7 +43,7 @@ public class SSLCredentialProviderFactory {
   private String providerChain;
 
   public SSLCredentialProviderFactory() {
-    this.providerChain = System.getProperty(PROVIDER_CHAIN_KEY, 
DEFAULT_PROVIDER_CHAIN);
+    this.providerChain = EnvUtils.getProperty(PROVIDER_CHAIN_KEY, 
DEFAULT_PROVIDER_CHAIN);
   }
 
   public SSLCredentialProviderFactory(String providerChain) {
diff --git 
a/solr/core/src/java/org/apache/solr/util/configuration/providers/SysPropSSLCredentialProvider.java
 
b/solr/core/src/java/org/apache/solr/util/configuration/providers/SysPropSSLCredentialProvider.java
index 52831a32dd3..1c78d29cd7a 100644
--- 
a/solr/core/src/java/org/apache/solr/util/configuration/providers/SysPropSSLCredentialProvider.java
+++ 
b/solr/core/src/java/org/apache/solr/util/configuration/providers/SysPropSSLCredentialProvider.java
@@ -18,6 +18,7 @@
 package org.apache.solr.util.configuration.providers;
 
 import java.util.EnumMap;
+import org.apache.solr.common.util.EnvUtils;
 
 /** System property based SSL configuration provider */
 public class SysPropSSLCredentialProvider extends 
AbstractSSLCredentialProvider {
@@ -28,10 +29,6 @@ public class SysPropSSLCredentialProvider extends 
AbstractSSLCredentialProvider
 
   @Override
   protected String getCredential(String syspropKey) {
-    if (System.getProperty(syspropKey) != null) {
-      return System.getProperty(syspropKey);
-    } else {
-      return null;
-    }
+    return EnvUtils.getProperty(syspropKey);
   }
 }
diff --git 
a/solr/core/src/java/org/apache/solr/util/tracing/SimplePropagator.java 
b/solr/core/src/java/org/apache/solr/util/tracing/SimplePropagator.java
index 51944b08703..a626e55f707 100644
--- a/solr/core/src/java/org/apache/solr/util/tracing/SimplePropagator.java
+++ b/solr/core/src/java/org/apache/solr/util/tracing/SimplePropagator.java
@@ -25,6 +25,7 @@ import java.lang.invoke.MethodHandles;
 import java.util.Collection;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
+import org.apache.solr.common.util.EnvUtils;
 import org.apache.solr.logging.MDCLoggingContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -41,11 +42,11 @@ public class SimplePropagator implements TextMapPropagator {
   private static final Logger log = 
LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
   private static final String TRACE_HOST_NAME =
-      System.getProperty("solr.traceHostName", System.getProperty("host"));
+      EnvUtils.getProperty("solr.traceHostName", EnvUtils.getProperty("host"));
   private static final TextMapPropagator INSTANCE = new SimplePropagator();
   private static final ContextKey<String> TRACE_ID_KEY = 
ContextKey.named("trace_id");
 
-  static final String TRACE_ID = System.getProperty("solr.traceIdHeader", 
"X-Trace-Id");
+  static final String TRACE_ID = EnvUtils.getProperty("solr.traceIdHeader", 
"X-Trace-Id");
   private static final List<String> FIELDS = List.of(TRACE_ID);
 
   private static final AtomicLong traceCounter = new AtomicLong(0);


Reply via email to