编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

springboot使用自定义配置源(自定义springbootstarter)

wxchong 2024-11-06 12:40:31 开源技术 15 ℃ 0 评论

来这个公司接手的这个项目,虽然使用的是springboot 而且版本比较低,最要命的一点就是只能打成war包(历史原因,不做多说),结果导致每次在各个环境打包 还得先在本地先修改好配置文件,再部署到相应环境上去,很是麻烦。那么我们能不能在指定环境上放置一份配置文件,让应用启动时就读取本地的这个文件呢,其实是可以的。springboot可以使用xml或者@ImportResource 来帮我们加载配置文件,但是呢这个有个限制,必须是本地的,而且格式也有限制,properties或者yml。那么我们如果要从远程读配置文件呢,也许有人会说用配置中心呀。只是,接入配置中心又会引发一堆改造,暂时不想改那么多。那么我们究竟如何加载远程的配置呢?

第一种:

通过EnvironmentPostProcessor接口把我们自己的配置读取过来


这里通过系统环境变量配置了环境上的物理文件当做配置文件,同时我们需要在META-INF/spring.factories中配置

org.springframework.boot.env.EnvironmentPostProcessor=com.jspxcms.core.MyEnvironmentPropertySource

第二种,参照springcloud的做法,相对来说比较复杂一点 ,但也只需简单三步

1.编写PropertySource

这里我们实现一个类MyPropertySource并继承EnumerablePropertySource 我们使用Map存储我们的配置


2.编写PropertySourceLocator

PropertySourceLocator就是用来帮助我们定位我们前面的MyPropertySource,实现的方法只有一个。

public class MyPropertySourceLocator implements PropertySourceLocator {

@Override

public PropertySource<?> locate(Environment environment) {


Map<String,String> properties = new HashMap<>();

properties.put("myPro","test");

MyPropertySource myPropertySource = new MyPropertySource("myPropertySource",properties);

return myPropertySource;

}

}

3.激活MyPropertySourceLocator

这个没啥好说的 在启动类或者配置类种加入如下:

@Bean
    public MyPropertySourceLocator myPropertySourceLocator(){
        return new MyPropertySourceLocator();
    }

最后我们同样需要在META-INF/spring.factories中配置

org.springframework.cloud.bootstrap.BootstrapConfiguration=\
com.lizo.MyConfigBootstrapConfiguration

这样我们就能成功的读取远程的配置啦。

ps:后面发现nacos的client也是基于PropertySourceLocator做的,


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表