spring boot自定义配置源操作步骤
概述
我们知道,在spring boot中可以通过xml或者@importresource 来引入自己的配置文件,但是这里有个限制,必须是本地,而且格式只能是 properties(或者 yaml)。那么,如果我们有远程配置,如何把他引入进来来呢。
如何做
其实自定义配置源只需要3步
第一步,编写propertysource
编写一个类继承enumerablepropertysource,然后实现它的抽象方法即可,抽象方法看名字就知道作用,简单起见,这里使用一个map来保存配置,例如:
public class mypropertysource extends enumerablepropertysource<map<string,string>> { public mypropertysource(string name, map source) { super(name, source); } //获取所有的配置名字 @override public string[] getpropertynames() { return source.keyset().toarray(new string[source.size()]); } //根据配置返回对应的属性 @override public object getproperty(string name) { return source.get(name); } }
第二步,编写propertysourcelocator
propertysourcelocator 其实就是用来定位我们前面的propertysource,需要重写的方法只有一个,就是返回一个propertysource对象,例如,
public class mypropertysourcelocator implements propertysourcelocator { @override public propertysource<?> locate(environment environment) { //简单起见,这里直接创建一个map,你可以在这里写从哪里获取配置信息。 map<string,string> properties = new hashmap<>(); properties.put("myname","lizo"); mypropertysource mypropertysource = new mypropertysource("mypropertysource",properties); return mypropertysource; } }
第三步,让propertysourcelocator生效
新建一个配置类,例如
@configuration public class myconfigbootstrapconfiguration { @bean public mypropertysourcelocator mypropertysourcelocator(){ return new mypropertysourcelocator(); } }
最后再创建/更新 meta-info/spring.factories(如果做过自定义spring boot开发的都知道这个文件)
org.springframework.cloud.bootstrap.bootstrapconfiguration=\ com.lizo.myconfigbootstrapconfiguration
简单来说就是给spring boot说,这个是一个启动配置类(一种优先级很高的配置类)。
编写测试
测试一
@springbootapplication public class test2 { public static void main(string[] args) throws sqlexception { configurableapplicationcontext run = springapplication.run(test2.class, args); ser bean = run.getbean(ser.class); system.out.println(bean.getmyname()); } @component public static class ser{ @value("${myname}") private string myname; public string getmyname() { return myname; } public void setmyname(string myname) { this.myname = myname; } } }
正确输出
测试二
我们在application配置文件中,引入这个变量呢,例如在application.properties中
my.name=${myname}
同样,结果也是能够生效的
myname就是上面在propertysourcelocator中写进去的配置属性。运行程序,可以看见确实是可以正确输出。
小结
上面只是抛砖引玉,这样无论是哪里的数据源,都可以通过这种方式编写,把配置交给spring 管理。这样再也不怕在本地配置文件中出现敏感信息啦,再也不怕修改配置文件需要登录每一个机器修改啦。
推荐阅读
-
spring boot自定义配置源操作步骤
-
Spring+Mybatis 实现aop数据库读写分离与多数据库源配置操作
-
Spring boot 配置多数据源并使用连接池管理- mysql
-
Spring boot JdbcTemplate使用多数据源配置
-
Spring Boot 2.0多数据源配置方法实例详解
-
详解Spring Boot工程集成全局唯一ID生成器 UidGenerator的操作步骤
-
Spring Boot 2.0 配置属性自定义转换的方法
-
详解Spring Boot整合Mybatis实现 Druid多数据源配置
-
详解Spring Boot整合Mybatis实现 Druid多数据源配置
-
Spring Boot多数据源及其事务管理配置方法