springboot 实现远程配置

springboot 作为现在 java 开发必备框架,重要程度不言而喻
其中配置文件我们一般是写在 application.yml
所以这个时候就出现了一些问题:
比如说我们想要修改一些配置信息,比如说 redis 地址,数据库账号密码等,这个时候通常的做法是在工程里面修改后重新打包部署,非常麻烦。

开始我们在 springboot 启动类中添加

  public static void main(String[] args) {
    SpringApplication app = new SpringApplication(DemoApplication.class);
    app.addInitializers(new RemoteConfig());
    app.run(args);
  }

然后写 RemoteConfig 的实现

public class RemoteConfig implements ApplicationContextInitializer {

  @Override
  public void initialize(ConfigurableApplicationContext applicationContext) {
    //获取当前应用的环境
    ConfigurableEnvironment ce = applicationContext.getEnvironment();
    Properties properties = new Properties();
    properties.put("spring.datasource.url", getRemoteConfigedDbUrl("spring.datasource.url"));
    PropertiesPropertySource propertiesPropertySource = new PropertiesPropertySource("remote", properties);
    ce.getPropertySources().addFirst(propertiesPropertySource);
  }

  private String getRemoteConfigedDbUrl(String propertname) {
    return "jdbc:mysql://localhost:3306/test";
  }
}

其中的getRemoteConfigedDbUrl 就是一个例子
开始 applicationContext,getEnvironment 获取当前应用的环境
一般来说,一个环境可能有好几个配置文件,也就是好几个PropertiesPropertySource 类,这个时候我们希望优先读取我们的远程配置怎么办呢,很简单,把它放到第一个就好了,即 ce.getPropertySources().addFirst();
如果有相同的配置的话,先读第一个,后面的无法覆盖,但请注意,其他的配置也是有效的,未覆盖到的都会加载进来

但是如何实现远程配置呢?
我的思路是再起一个应用,用来读 redis 缓存,然后 properties.put 就放入从 redis 中读取的数据,也就实现了远程配置

你可能感兴趣的:(Springboot,spring,boot,java,spring)