ApplicationContextInitializer、PropertySourceLocator自定义bootstrap属性源

PropertySourceLocator自定义bootstrap属性源

PropertySourceLocator 接口是 Spring Boot 中用于定位属性源的接口,它的作用是在应用程序启动时加载配置文件,并将其转换为 PropertySource 对象,以便应用程序可以使用这些属性。

实现 PropertySourceLocator 接口,需要重写 locate 方法。该方法的作用是根据给定的环境和属性源名称查找属性源,并返回一个 PropertySource 对象。

示例代码:

import org.springframework.boot.env.PropertySourceLocator;
import org.springframework.core.env.*;

public class MyPropertySourceLocator implements PropertySourceLocator {

   @Override
   public PropertySource<?> locate(Environment environment) {
       Map<String,Object> params = new HashMap<>();
       params.put("name","Lucifer");
       params.put("age","25");
       MapPropertySource mapPropertySource = new MapPropertySource("myPropertySource",params);
       return mapPropertySource;
   }
}

spring.factories中配置自定义配置类

#在Spring Cloud应用程序中,BootstrapConfiguration是一个特殊的配置类,它用于在应用程序启动时加载配置信息。它的作用是在应用程序启动之前,提供一种机制来加载一些基础的配置信息,例如从配置中心加载配置信息、设置环境变量等。这些配置信息可以被应用程序中的其他组件所使用,例如Spring的配置文件、Java代码等。

#在Spring Cloud中,BootstrapConfiguration是通过spring.factories文件来自动加载的。当Spring Boot应用程序启动时,它会扫描classpath下的所有spring.factories文件,并加载其中的所有配置类。在这些配置类中,如果存在org.springframework.cloud.bootstrap.BootstrapConfiguration的实现类,那么它们将会被自动加载并执行。

org.springframework.cloud.bootstrap.BootstrapConfiguration=com.lucifer.utils.MyPropertySourceLocator 


ApplicationContextInitializer自定义bootstrap属性源

import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.MapPropertySource;
import org.springframework.core.env.MutablePropertySources;

import java.util.HashMap;
import java.util.Map;

public class CustomBootstrapPropertySourceInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        MutablePropertySources propertySources = applicationContext.getEnvironment().getPropertySources();
        Map<String, Object> customProperties = new HashMap<>();
        customProperties.put("custom.property", "custom value");
        propertySources.addFirst(new MapPropertySource("customBootstrapProperties", customProperties));
    }
}

建了一个名为CustomBootstrapPropertySourceInitializer的类,实现了ApplicationContextInitializer接口。initialize方法中,我们获取了应用程序上下文的可配置环境,并获取了可变属性源。然后,创建了一个包含自定义属性的Map,并将其添加到属性源的第一个位置。这样,就可以在应用程序中使用自定义属性了。

spring.factories中配置

org.springframework.cloud.bootstrap.BootstrapConfiguration=com.example.CustomBootstrapPropertySourceInitializer

参考文章:https://www.jianshu.com/p/377a9b4c3c56

你可能感兴趣的:(bootstrap,java,前端)