diff --git a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java
index 889d702fec0..fd7dbf2607b 100644
--- a/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java
+++ b/log4j-core-test/src/test/java/org/apache/logging/log4j/core/ShutdownDisabledTest.java
@@ -17,16 +17,24 @@
 package org.apache.logging.log4j.core;
 
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
+import java.lang.reflect.Field;
 import org.apache.logging.log4j.core.config.Configuration;
 import org.apache.logging.log4j.core.test.junit.LoggerContextSource;
+import org.apache.logging.log4j.core.util.ReflectionUtil;
+import org.apache.logging.log4j.test.junit.SetTestProperty;
 import org.junit.jupiter.api.Test;
 
+@SetTestProperty(key = "log4j2.isWebapp", value = "false")
 @LoggerContextSource("log4j-test3.xml")
 class ShutdownDisabledTest {
 
     @Test
-    void testShutdownFlag(final Configuration config) {
+    void testShutdownFlag(final Configuration config, final LoggerContext ctx) throws NoSuchFieldException {
+        Field shutdownCallback = LoggerContext.class.getDeclaredField("shutdownCallback");
+        Object fieldValue = ReflectionUtil.getFieldValue(shutdownCallback, ctx);
         assertFalse(config.isShutdownHookEnabled(), "Shutdown hook is enabled");
+        assertNull(fieldValue, "Shutdown callback is null");
     }
 }
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
index 5d486c7649d..bf2f77383c0 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/LoggerContext.java
@@ -321,6 +321,8 @@ public void start(final Configuration config) {
         if (configLock.tryLock()) {
             try {
                 if (this.isInitialized() || this.isStopped()) {
+                    setStarting();
+                    reconfigure(config);
                     if (this.configuration.isShutdownHookEnabled()) {
                         setUpShutdownHook();
                     }
@@ -330,7 +332,6 @@ public void start(final Configuration config) {
                 configLock.unlock();
             }
         }
-        setConfiguration(config);
         LOGGER.info("{}[name={}] started with configuration {}.", getClass().getSimpleName(), getName(), config);
     }
 
diff --git a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java
index 65bc1163e64..4db51b61653 100644
--- a/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java
+++ b/log4j-spring-boot/src/main/java/org/apache/logging/log4j/spring/boot/Log4j2SpringBootLoggingSystem.java
@@ -158,7 +158,7 @@ protected void loadConfiguration(final String location, final LogFile logFile, f
                 final URL url = ResourceUtils.getURL(location);
                 final ConfigurationSource source = getConfigurationSource(url);
                 if (source != null) {
-                    ctx.start(ConfigurationFactory.getInstance().getConfiguration(ctx, source));
+                    ctx.reconfigure(ConfigurationFactory.getInstance().getConfiguration(ctx, source));
                 }
             } else {
                 final List<AbstractConfiguration> configs = new ArrayList<>();
@@ -189,9 +189,9 @@ protected void loadConfiguration(final String location, final LogFile logFile, f
                     first = false;
                 }
                 if (configs.size() > 1) {
-                    ctx.start(new CompositeConfiguration(configs));
+                    ctx.reconfigure(new CompositeConfiguration(configs));
                 } else {
-                    ctx.start(configs.get(0));
+                    ctx.reconfigure(configs.get(0));
                 }
             }
         } catch (Exception ex) {