diff --git a/spring-core-6/src/main/java/com/baeldung/reinitializebean/ReinitializeBeanApp.java b/spring-core-6/src/main/java/com/baeldung/reinitializebean/ReinitializeBeanApp.java new file mode 100644 index 0000000000..5c3b607579 --- /dev/null +++ b/spring-core-6/src/main/java/com/baeldung/reinitializebean/ReinitializeBeanApp.java @@ -0,0 +1,11 @@ +package com.baeldung.reinitializebean; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ReinitializeBeanApp { + public static void main(String[] args) { + SpringApplication.run(ReinitializeBeanApp.class, args); + } +} diff --git a/spring-core-6/src/main/java/com/baeldung/reinitializebean/cache/ConfigManager.java b/spring-core-6/src/main/java/com/baeldung/reinitializebean/cache/ConfigManager.java new file mode 100644 index 0000000000..1e4dee6cc4 --- /dev/null +++ b/spring-core-6/src/main/java/com/baeldung/reinitializebean/cache/ConfigManager.java @@ -0,0 +1,51 @@ +package com.baeldung.reinitializebean.cache; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.HashMap; +import java.util.Map; +import java.util.Properties; + +@Service("ConfigManager") +public class ConfigManager { + + private static final Log LOG = LogFactory.getLog(ConfigManager.class); + + private Map config; + + private final String filePath; + + public ConfigManager(@Value("${config.file.path}") String filePath) { + this.filePath = filePath; + initConfigs(); + } + + private void initConfigs() { + Properties properties = new Properties(); + try { + properties.load(Files.newInputStream(Paths.get(filePath))); + } catch (IOException e) { + LOG.error("Error loading configuration:", e); + } + config = new HashMap<>(); + for (Map.Entry entry : properties.entrySet()) { + config.put(String.valueOf(entry.getKey()), entry.getValue()); + } + } + + public Object getConfig(String key) { + return config.get(key); + } + + public void reinitializeConfig() { + initConfigs(); + } + +} diff --git a/spring-core-6/src/main/java/com/baeldung/reinitializebean/controller/ConfigController.java b/spring-core-6/src/main/java/com/baeldung/reinitializebean/controller/ConfigController.java new file mode 100644 index 0000000000..377882a8f0 --- /dev/null +++ b/spring-core-6/src/main/java/com/baeldung/reinitializebean/controller/ConfigController.java @@ -0,0 +1,55 @@ +package com.baeldung.reinitializebean.controller; + +import com.baeldung.reinitializebean.cache.ConfigManager; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.beans.factory.support.DefaultSingletonBeanRegistry; +import org.springframework.context.ApplicationContext; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/config") +public class ConfigController { + + @Value("${config.file.path}") + private String filePath; + private final ApplicationContext applicationContext; + private final ConfigManager configManager; + + public ConfigController(ApplicationContext applicationContext, ConfigManager configManager) { + this.applicationContext = applicationContext; + this.configManager = configManager; + } + + @GetMapping("/reinitializeConfig") + public void reinitializeConfig() { + configManager.reinitializeConfig(); + } + + @GetMapping("/reinitializeBean") + public void reinitializeBean() { + DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) applicationContext.getAutowireCapableBeanFactory(); + registry.destroySingleton("ConfigManager"); + registry.registerSingleton("ConfigManager", new ConfigManager(filePath)); + } + + @GetMapping("/destroyBean") + public void destroyBean() { + DefaultSingletonBeanRegistry registry = (DefaultSingletonBeanRegistry) applicationContext.getAutowireCapableBeanFactory(); + registry.destroySingleton("ConfigManager"); + } + + @GetMapping("/{key}") + public Object get(@PathVariable String key) { + return configManager.getConfig(key); + } + + @GetMapping("/context/{key}") + public Object getFromContext(@PathVariable String key) { + ConfigManager dynamicConfigManager = applicationContext.getBean(ConfigManager.class); + return dynamicConfigManager.getConfig(key); + } + +} diff --git a/spring-core-6/src/main/resources/application.properties b/spring-core-6/src/main/resources/application.properties index d0029f363c..28a65dce32 100644 --- a/spring-core-6/src/main/resources/application.properties +++ b/spring-core-6/src/main/resources/application.properties @@ -1,4 +1,5 @@ environment.name=${OS} java.home.and.environment=${JAVA_HOME}+${OS} not.existing.system.property=${thispropertydoesnotexist} -baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME} \ No newline at end of file +baeldung.presentation=${HELLO_BAELDUNG}. Java is installed in the folder: ${JAVA_HOME} +config.file.path=./spring-core-6/src/main/resources/config.properties \ No newline at end of file diff --git a/spring-core-6/src/main/resources/config.properties b/spring-core-6/src/main/resources/config.properties new file mode 100644 index 0000000000..591d32f33c --- /dev/null +++ b/spring-core-6/src/main/resources/config.properties @@ -0,0 +1 @@ +property1=value2