Quarkus实战:专为Kubernetes而优化的Java解决方案
上QQ阅读APP看书,第一时间看更新

4.9 创建自定义配置源

问题

如何从其他配置源而不是从application.properties文件加载配置参数?

解决方案

Quarkus使用Eclipse MicroProfile Configuration规范来实现所有关于配置的逻辑。该规范提供了org.eclipse.microprofile.config.spi.ConfigSource Java SPI(https://oreil.ly/o0A51)接口,以实现一种自定义的方式来加载配置属性,而不是使用Quarkus提供的默认方式加载配置属性。

例如,你可以从数据库、XML文件或REST API中加载配置属性。

让我们创建一个简单的内存配置源,它从实例化时填充的Map中获取配置属性。创建一个名为org.acme.quick-start.InMemoryConfigSource.java的新类:

❶用属性填充Map

❷用于确定配置值的重要程度,数值越大,优先级越高

❸以Map的形式获取所有属性,本例为直接获取

❹获取单个属性的值

❺返回此配置源的名称

你需要将其注册为一个Java SPI。在src/main/resources/META-INF中创建services文件夹,然后在services文件夹里创建一个名为org.eclipse.microprofile.config.spi.ConfigSource的文件,内容如下:

最后,你可以修改org.acme.quickstart.GreetingResource.java类来注入此属性:

❶注入InMemoryConfigSource中定义的属性值

在终端窗口中请求/hello/color,可以看到输出的结果是自定义配置源中的值:

讨论

每个ConfigSource都有一个指定的序数值,当同一应用程序定义了多个ConfigSource时,该序数用于设置从ConfigSource中获取值的重要程度。序数值较高的ConfigSource会比序数值较低的ConfigSource优先使用。以下面列表中的默认值作为参考,在所有的配置源上都会使用系统属性,如果没有找到其他的ConfigSource,则使用src/main/resources目录下的application.properties文件:

·系统属性为400

·环境变量为300

·config目录下的application.properties为260

·项目中的application.properties为250