springboot中获取apollo或者nacos里的配置文件
发布网友
发布时间:2022-09-08 13:11
我来回答
共1个回答
热心网友
时间:2024-12-11 21:40
常规的,在springboot中一般只需要拿appolo或者nacos里配置的属性就够了。
但是也有一些很特殊的场景,要拿到appolo或者nacos里配置的文件,比如有个第三方jar包提供的方法中,要求把properties配置文件路径传进去来初始化第三方jar包里需要用到的东西,这时候一般是把properties文件配置到appolo或者nacos里,但是如何直接拿到这个properties文件而不是里面的属性值呢?
apollo里直接提供了把配置的相应namespace直接转换成file的方法:
再把这个content转换成输入流就可以用了
如果只是想拿到里面某个namespace的属性,则可以:
key为属性key名,c.getPropertyNames()方法能拿到该namespace下面的所有属性,返回一个Set<String>集合,再遍历这个集合就能拿到所有属性。
nacos跟apollo的处理思路有点不一样,找了很多资料,貌似没有找到nacos里直接获取整个获取配置文件的方法,后面如果有同学找到了这个方法记得留言提醒我。
nacos在springboot启动的时候已经把所有配置文件都注入到了spring里。
第一种:可以直接用注解 @Value("${key}")来获取配置好的属性值
第二种:在java里获取:
新建SpringContextUtil实现org.springframework.context.ApplicationContextAware这个接口:
在启动类用注解导入该类:@Import({SpringContextUtil.class})
利用org.springframework.core.env.Environment类来直接获取属性:
如果有这样一个需求,有个第三方的jar包要求初始化配置好的properties文件,只给了properties文件的路径传参,只能用文件路径的方式初始化这个第三方jar包,那么我们就必须保证项目里或者其他文件夹有这个properties文件才可以,而这些配置如果经常要变的话,最好也是配置在nacos或者apollo,如此看来,apollo是可以直接把配置的相应namespace直接转换成file,而nacos大概只能把所有属性手工生成一个新的properties文件来保存到本地了。
这个生成文件的过程,要在springboot启动之后立即执行:
那我们就要建一个配置类实现org.springframework.beans.factory.InitializingBean这个接口,重写afterPropertiesSet()方法:把需要启动后执行的逻辑放在里面,下面是一个示例:
把这个类在启动类里注入:
如此,在启动的时候就可以在本地生成一个cssconfig.properties文件了。
于是乎就可以类似这样调用第三方接口(根据第三方jar包来定):