Quarkus集成apollo配置中心
前言
Quarkus默認的配置文件和spring boot 一樣,默認讀取application.properties文件。
apollo是一個配置集中管理的開源項目,已被廣泛應用。
下面我們就分析下Quarkus的配置加載結構,將apollo集成進來。
Eclipse MicroProfile Config:https://github.com/eclipse/microprofile-config/
smallrye-config:https://github.com/smallrye/smallrye-config
Quarkus的config構成
Quarkus的配置功能是基于Eclipse MicroProfile Config配置規(guī)范而來的,MicroProfile Config本身不提供配置功能的實現(xiàn),只提供了基礎的配置api抽象,smallrye-config是這個api的其中一個實現(xiàn),Quarkus里用的就是smallrye-config。
microProfile config設計
1、可以通過ConfigProvider#getConfig()訪問應用程序的當前配置。
2、一個配置包括從org.eclipse.microprofile.config.spi.ConfigSource接口收集的列表。
這些ConfigSource根據(jù)其序號進行排序。這樣,可以從外部以較低的重要性覆蓋配置。
默認情況下,有3個默認的ConfigSources:
- System.getProperties() (ordinlal =400)
- System.getenv()(ordinal =300)
- ClassPath上的所有META-INF / microprofile-config.properties文件。(默認ordinal = 100,可通過每個文件內(nèi)的config_ordinal屬性分別配置)
因此,可以在與應用程序打包在一起的上述文件中指定默認值,以后可以為每個部署覆蓋默認值。較高的序數(shù)優(yōu)先于較低的序數(shù)。
從microProfile config設計來看,配置文件應該是META-INF / microprofile-config.properties文件才對,但是除了上面默認的三個配置源外,Quarkus也提供了一個,代碼見:
io.quarkus.runtime.configuration.ApplicationPropertiesConfigSource,
如:
public abstract class ApplicationPropertiesConfigSource extends PropertiesConfigSource {
private static final long serialVersionUID = -4694780118527396798L;
static final String APPLICATION_PROPERTIES = "application.properties";
static final String MP_PROPERTIES = "META-INF/microprofile-config.properties";
ApplicationPropertiesConfigSource(InputStream is, int ordinal) {
super(readProperties(is), APPLICATION_PROPERTIES, ordinal);
}
ApplicationPropertiesConfigSource(InputStream is, String nm, int ordinal) {
super(readProperties(is), nm, ordinal);
}
private static Map readProperties(final InputStream is) {
if (is == null) {
return Collections.emptyMap();
}
try (Closeable ignored = is) {
try (InputStreamReader isr = new InputStreamReader(is, StandardCharsets.UTF_8)) {
try (BufferedReader br = new BufferedReader(isr)) {
final Properties properties = new Properties();
properties.load(br);
return (Map) (Map) properties;
}
}
} catch (IOException e) {
throw new IOError(e);
}
}
}集成apollo
綜上,集成apollo就變得異常簡單了,首先實現(xiàn)ConfigSource接口,我的實現(xiàn)如下:
/**
* @author kl : http://kailing.pub
* @version 1.0
* @date 2020/7/8 11:15
*/
public class ApolloConfigSource implements ConfigSource {
private final static String CONFIG_SOURCE_NAME = "Apollo";
private final Config config = ConfigService.getAppConfig();
@Override
public SetgetPropertyNames() {
return config.getPropertyNames();
}
@Override
public int getOrdinal() {
return 600;
}
@Override
public Map getProperties() {
Map properties = new HashMap<>(6);
for (String key : getPropertyNames()) {
properties.put(key, config.getProperty(key, null));
}
return properties;
}
@Override
public String getValue(String propertyName) {
return config.getProperty(propertyName, null);
}
@Override
public String getName() {
return CONFIG_SOURCE_NAME;
}
}第二步,在META-INF/services下,創(chuàng)建文件
org.eclipse.microprofile.config.spi.ConfigSource
將你的實現(xiàn)全路徑名稱寫入這個文件,聲明配置源即可,如下圖所示:

現(xiàn)在,你可以將你的application.properties中的所有配置全部復制到apollo中了,然后刪除這個文件,重新啟動項目,你會發(fā)現(xiàn)一起運行正常
以上就是Quarkus集成apollo配置中心的詳細內(nèi)容,更多關于Quarkus集成apollo配置的資料請關注腳本之家其它相關文章!
相關文章
SpringBoot的服務注冊與發(fā)現(xiàn)示例
本篇文章主要介紹了SpringBoot的服務注冊與發(fā)現(xiàn)示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
java并發(fā)容器ConcurrentHashMap深入分析
這篇文章主要為大家介紹了java并發(fā)容器ConcurrentHashMap使用示例及深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05

