MicroProfile配置 ,即一部分MicroProfile规格,是Java Enterprise和微服务配置的标准化。

开箱即用(即,对于规范定义的所有实现都是强制性的)有3种方法来定义您的配置:

  • System.getProperties()
  • System.getenv()
  • 类路径上的所有META-INF/microprofile-config.properties

ordinal这些配置资源的决定,系统将寻找一个特定属性的顺序。

因此,如果您具有config属性,其关键字为myservice.hostname ,则将其注入代码中:

@Inject @ConfigProperty(name = "myservice.hostname", defaultValue = "localhost")private String myServiceHostname;

系统将首先查看是否存在具有关键字myservice.hostname的System属性,否则将尝试环境变量,然后尝试类路径上的所有microprofile-config.property文件。 如果在任何地方都找不到它,它将回defaultValue注释中的defaultValue

您自己的配置源。

您还可以提供自己的配置源,并定义该源的加载顺序。 Config Api使用SPI加载所有配置源,因此创建自己的源非常容易。

例如,假设我们要首先加载一个源(即在系统属性之前发生事件),然后将这些配置值存储在内存中,则可以编写一个扩展org.eclipse.microprofile.config.spi.ConfigSource的类:

public class MemoryConfigSource implements ConfigSource {public static final String NAME = "MemoryConfigSource";private static final Map<String,String> PROPERTIES = new HashMap<>();@Overridepublic int getOrdinal() {return 900;}@Overridepublic Map<String, String> getProperties() {return PROPERTIES;}@Overridepublic String getValue(String key) {if(PROPERTIES.containsKey(key)){return PROPERTIES.get(key);}return null;}@Overridepublic String getName() {return NAME;}}

(在此处查看完整的源代码)

您还(根据SPI)通过在名为org.eclipse.microprofile.config.spi.ConfigSource的文件中添加条目,在META-INF/services注册实现。

com.github.phillipkruger.microprofileextentions.config.MemoryConfigSource

( 这里有完整的示例)

上面是一个非常简单的示例,只是将配置值保留在静态映射中。 然后,您可以创建一个JAX-RS服务( 示例 )以在此映射中添加和删除值。

但是,如果您想要更复杂的配置源怎么办? 本身需要配置吗?

使用MicroProfile Config配置您自己的MicroProfile Config源。

例如,如果我们想要一个在etcd中找到值的Config源,我们还需要配置etcd服务器的详细信息。 好消息是我们可以为此使用Config Api!

但是,“配置源”实现不是CDI Bean,因此不能@Inject值。 您还需要忽略自己(即,在配置源时不要看源,否则您将陷入无休止的循环)

在没有CDI的情况下获取配置非常容易:

Config config = ConfigProvider.getConfig();

(感谢友好的MicroProfile Google小组的 Rudy De Busscher和其他人的帮助)

因此,现在我们只需要确保忽略自己即可:

private String getPropertyValue(String key,String defaultValue){Config config = ConfigProvider.getConfig();Iterable<ConfigSource> configSources = config.getConfigSources();for(ConfigSource configsource:configSources){if(!configsource.getName().equals(NAME)){ // Ignoring myselfString val = configsource.getValue(key);if(val!=null && !val.isEmpty())return val;}}return defaultValue;}

其中NAME是您自己的配置源的名称。

( 这里有完整的示例)

现在,我可以使用任何其他配置源选项来定义我的etcd服务器的服务器详细信息。

运行示例。

我正在Payara-micro上运行示例 (但它应适用于任何MicroProfile实现)。

使用Maven:

<build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>fish.payara.maven.plugins</groupId><artifactId>payara-micro-maven-plugin</artifactId><version>1.0.1</version><executions><execution><phase>pre-integration-test</phase><goals><goal>start</goal></goals></execution></executions><configuration><artifactItem><groupId>fish.payara.extras</groupId><artifactId>payara-micro</artifactId><version>${payara-micro.version}</version></artifactItem><deployWar>true</deployWar><!--<javaCommandLineOptions><option><value>-Dconfigsource.etcd.host=127.0.0.1</value></option></javaCommandLineOptions>--></configuration></plugin>

(在此处查看完整的pom.xml

如果取消注释javaCommandLineOptions ,则可以将etcd配置源中使用的etcd服务器主机名更改为其他名称。

我还可以使用其他任何配置源来执行此操作,例如,在示例war文件(如本示例 )中包含microprofile-config.properties ,或使用其他自定义配置源并在内存中进行更改。

用作库。

您还可以将所有这些捆绑在一个jar文件中,以供您的任何项目使用。 我在maven Central和github中提供了上述内容,因此您也可以直接使用它。

只需将其添加到您的pom.xml

<dependency><groupId>com.github.phillip-kruger.microprofile-extentions</groupId><artifactId>config-ext</artifactId><version>1.0.7</version></dependency>

并且您拥有上述所有配置源。

翻译自: https://www.javacodegeeks.com/2018/08/microprofile-config-source.html

您自己的MicroProfile Config来源相关推荐

  1. config文件_您自己的MicroProfile Config来源

    config文件 MicroProfile配置,即一部分MicroProfile规格,是Java Enterprise和微服务配置的标准化. 开箱即用(即,对于规范定义的所有实现都是强制性的)有3种方 ...

  2. IBM发布Open Liberty 18.0.0.4,支持MicroProfile 2.1和反应性扩展框架

    IBM在2018年第四季度发布的Open Liberty 18.0.0.4提供了对MicroProfile 2.1.反应性扩展框架和连接池指标的全面支持.根据发布说明: Open Liberty现在对 ...

  3. MicroProfile 1.2新增功能介绍

    Eclipse Foundation最近发布了MicroProfile 1.2版,该版本提供了下列新增API: \\ Health Check 1.0\\ Health Metrics 1.0\\ F ...

  4. jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper

    jax-rs配置 当使用JAX-RS创建REST服务时,通常不返回任何内容(例如HTTP 201/2/4等)或某些数据(可能采用JSON格式(因此HTTP 200),或者返回某些异常/错误(因此HTT ...

  5. system health_可重复使用的MicroProfile Health探针

    system health MicroProfile Health API是一种非常基本的API,它基于一个或多个Health Probe报告您的服务状态. 在某些服务器或群集控制器需要决定是否以及何 ...

  6. 关于Jakarta EE与MicroProfile的创新和关系的提案

    在JCrete非会议上,我们中的一些人正在就Jakarta EE的愿景,尤其是与MicroProfile的关系进行头脑风暴. 我想开始讨论,以使所有人都在同一页面上,尤其是Jakarta EE和Mic ...

  7. MicroProfile 2.2 BOM导入支持

    MicroProfile 2.2刚刚发布,其中包含对Fault Tolerance,Open Tracing,Open API和Rest Client API的更新. 自2.2版以来,还支持使用BOM ...

  8. MicroProfile在Jakarta EE时代的作用

    自创建以来,MicroProfile赢得了广泛的关注,并制定了各种规格. 最初,它的创建是为了在多个供应商的推动下,以更快的速度推进微服务世界的企业Java. 现在,随着在Eclipse Founda ...

  9. 具有MicroProfile配置的可配置JAX-RS ExceptionMapper

    当您使用JAX-RS创建REST服务时,通常要么不返回任何内容(例如HTTP 201/2/4等),要么返回某些数据(可能采用JSON格式(因此HTTP 200),或者返回某些异常/错误(例如HTTP ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续2)
  2. 解决Latex图片或者表格浮动
  3. ubuntu 16.04 更换国内源(下载源)(阿里源)(换源)
  4. Ubuntu系统如何安装软件
  5. 关于“无法完成该动作 到Microsoft Exchange的连接不可用”的解决办法
  6. Web笔记-通过版本号控制客户端浏览器中的缓存
  7. 英文操作系统下WebBrowser控件无法显示本地页面的解决方法
  8. 客户网站被黑导致CDN加速后打开域名就提示域名纠错
  9. unix 连接 mysql_UNIX域套接字连接mysql
  10. Oracle系统表大全(转)
  11. 十大排序思维导图(个人理解)
  12. 软件项目组织架构安排
  13. java 服务器程序部署环境搭建
  14. 手撸Mybatis源码-基础版
  15. EXCEL,复制内容随时会卡死,经常发生
  16. [走过的路]联想时光——人艰不拆(店员篇+推销员篇)
  17. 计算几何(中线长计算三角形面积) - Medians - UVA 10347
  18. 『实用教程』使用Visual Studio自带的Git管理回滚代码版本
  19. stopstart按钮怎么用_汽车Start-Stop启停技术简明讲解
  20. mybitplus name or service not known或quartz couldn‘t get host name

热门文章

  1. 19、mysql中定时器的创建和使用
  2. 数据库连接池的选择及其开发配置
  3. JAVA面试常考系列九
  4. Spring MVC 基于URL的拦截和映射规则
  5. Class的getName、getSimpleName与getCanonicalName的区别
  6. JAVAWEB(笔记)
  7. Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
  8. IDEA 底部工具栏没有 Version Control 解决办法
  9. windows为什么把linux打败了,快二十年了,人们为什么还是没有抛弃 Windows 转向 Linux?...
  10. php中时间轴,PHP时间轴函数