Quarkus集成apollo配置中心

 更新时间:2022年02月23日 14:34:04   作者:kl  
这篇文章主要介绍了Quarkus集成apollo配置中心,文中详细的讲解了Quarkus的config构成,以及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配置规范而来的,MicroProfile Config本身不提供配置功能的实现,只提供了基础的配置api抽象,smallrye-config是这个api的其中一个实现,Quarkus里用的就是smallrye-config。

microProfile config设计

1、可以通过ConfigProvider#getConfig()访问应用程序的当前配置。

2、一个配置包括从org.eclipse.microprofile.config.spi.ConfigSource接口收集的列表。

这些ConfigSource根据其序号进行排序。这样,可以从外部以较低的重要性覆盖配置。

默认情况下,有3个默认的ConfigSources:

  • System.getProperties() (ordinlal =400)
  • System.getenv()(ordinal =300)
  • ClassPath上的所有META-INF / microprofile-config.properties文件。(默认ordinal = 100,可通过每个文件内的config_ordinal属性分别配置)

因此,可以在与应用程序打包在一起的上述文件中指定默认值,以后可以为每个部署覆盖默认值。较高的序数优先于较低的序数。

从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就变得异常简单了,首先实现ConfigSource接口,我的实现如下:

/**
 * @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下,创建文件

org.eclipse.microprofile.config.spi.ConfigSource

将你的实现全路径名称写入这个文件,声明配置源即可,如下图所示: 

 现在,你可以将你的application.properties中的所有配置全部复制到apollo中了,然后删除这个文件,重新启动项目,你会发现一起运行正常

以上就是Quarkus集成apollo配置中心的详细内容,更多关于Quarkus集成apollo配置的资料请关注脚本之家其它相关文章!

相关文章

  • MyBatis中select语句中使用String[]数组作为参数的操作方法

    MyBatis中select语句中使用String[]数组作为参数的操作方法

    在 MyBatis 中,如何在 mapper.xml 配置文件中 select 语句中使用 String[] 数组作为参数呢,并且使用IN关键字来匹配数据库中的记录,这篇文章主要介绍了MyBatis中select语句中使用String[]数组作为参数,需要的朋友可以参考下
    2023-12-12
  • Effective Java (异常处理)

    Effective Java (异常处理)

    Effective Java (异常处理),需要的朋友可以参考一下
    2013-02-02
  • Spring设计模式中代理模式详细讲解

    Spring设计模式中代理模式详细讲解

    如何实现在不修改源码的基础上实现代码功能的增强呢?spring为我们提供了代理模式。所谓的代理模式通俗来说就是一个中介,它给某一个对象提供一个代理对象,并由代理对象控制原对象的引用,从而实现在不修改源码的基础上实现代码功能的增强
    2023-01-01
  • Mybatis-plus实现主键自增和自动注入时间的示例代码

    Mybatis-plus实现主键自增和自动注入时间的示例代码

    这篇文章主要介绍了Mybatis-plus实现主键自增和自动注入时间的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringCloud之loadbalancer负载均衡组件实战详解

    SpringCloud之loadbalancer负载均衡组件实战详解

    LoadBalancer是Spring Cloud官方提供的负载均衡组件,可用于替代Ribbon,这篇文章主要介绍了SpringCloud之loadbalancer负载均衡组件,需要的朋友可以参考下
    2023-06-06
  • 深入了解Java方法的重载与重写

    深入了解Java方法的重载与重写

    在最初学习java的时候,人们都知道,java这种面向对象的语言,一共有三大特征,分别是:封装、继承、多态。多态的实现途径有三种:重写、重载、接口实现。本文就来为大家详细讲讲Java方法的重载与重写
    2022-07-07
  • 解决mybatis case when 报错的问题

    解决mybatis case when 报错的问题

    这篇文章主要介绍了解决mybatis case when 报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • java获取新insert数据自增id的实现方法

    java获取新insert数据自增id的实现方法

    这篇文章主要介绍了java获取新insert数据自增id的实现方法,在具体生成id的时候,我们的操作顺序一般是:先在主表中插入记录,然后获得自动生成的id,以它为基础插入从表的记录,需要的朋友可以参考下
    2019-06-06
  • Java中的泛型和泛型通配符详解

    Java中的泛型和泛型通配符详解

    这篇文章主要介绍了Java中的泛型和泛型通配符详解,泛型的作用就是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的在没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,需要的朋友可以参考下
    2023-07-07
  • Springboot Thymeleaf数字对象使用方法

    Springboot Thymeleaf数字对象使用方法

    这篇文章主要介绍了Springboot Thymeleaf数字对象使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2007-09-09

最新评论