您自己的MicroProfile Config来源
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来源相关推荐
- config文件_您自己的MicroProfile Config来源
config文件 MicroProfile配置,即一部分MicroProfile规格,是Java Enterprise和微服务配置的标准化. 开箱即用(即,对于规范定义的所有实现都是强制性的)有3种方 ...
- IBM发布Open Liberty 18.0.0.4,支持MicroProfile 2.1和反应性扩展框架
IBM在2018年第四季度发布的Open Liberty 18.0.0.4提供了对MicroProfile 2.1.反应性扩展框架和连接池指标的全面支持.根据发布说明: Open Liberty现在对 ...
- MicroProfile 1.2新增功能介绍
Eclipse Foundation最近发布了MicroProfile 1.2版,该版本提供了下列新增API: \\ Health Check 1.0\\ Health Metrics 1.0\\ F ...
- jax-rs配置_具有MicroProfile配置的可配置JAX-RS ExceptionMapper
jax-rs配置 当使用JAX-RS创建REST服务时,通常不返回任何内容(例如HTTP 201/2/4等)或某些数据(可能采用JSON格式(因此HTTP 200),或者返回某些异常/错误(因此HTT ...
- system health_可重复使用的MicroProfile Health探针
system health MicroProfile Health API是一种非常基本的API,它基于一个或多个Health Probe报告您的服务状态. 在某些服务器或群集控制器需要决定是否以及何 ...
- 关于Jakarta EE与MicroProfile的创新和关系的提案
在JCrete非会议上,我们中的一些人正在就Jakarta EE的愿景,尤其是与MicroProfile的关系进行头脑风暴. 我想开始讨论,以使所有人都在同一页面上,尤其是Jakarta EE和Mic ...
- MicroProfile 2.2 BOM导入支持
MicroProfile 2.2刚刚发布,其中包含对Fault Tolerance,Open Tracing,Open API和Rest Client API的更新. 自2.2版以来,还支持使用BOM ...
- MicroProfile在Jakarta EE时代的作用
自创建以来,MicroProfile赢得了广泛的关注,并制定了各种规格. 最初,它的创建是为了在多个供应商的推动下,以更快的速度推进微服务世界的企业Java. 现在,随着在Eclipse Founda ...
- 具有MicroProfile配置的可配置JAX-RS ExceptionMapper
当您使用JAX-RS创建REST服务时,通常要么不返回任何内容(例如HTTP 201/2/4等),要么返回某些数据(可能采用JSON格式(因此HTTP 200),或者返回某些异常/错误(例如HTTP ...
最新文章
- 《评人工智能如何走向新阶段》后记(再续2)
- 解决Latex图片或者表格浮动
- ubuntu 16.04 更换国内源(下载源)(阿里源)(换源)
- Ubuntu系统如何安装软件
- 关于“无法完成该动作 到Microsoft Exchange的连接不可用”的解决办法
- Web笔记-通过版本号控制客户端浏览器中的缓存
- 英文操作系统下WebBrowser控件无法显示本地页面的解决方法
- 客户网站被黑导致CDN加速后打开域名就提示域名纠错
- unix 连接 mysql_UNIX域套接字连接mysql
- Oracle系统表大全(转)
- 十大排序思维导图(个人理解)
- 软件项目组织架构安排
- java 服务器程序部署环境搭建
- 手撸Mybatis源码-基础版
- EXCEL,复制内容随时会卡死,经常发生
- [走过的路]联想时光——人艰不拆(店员篇+推销员篇)
- 计算几何(中线长计算三角形面积) - Medians - UVA 10347
- 『实用教程』使用Visual Studio自带的Git管理回滚代码版本
- stopstart按钮怎么用_汽车Start-Stop启停技术简明讲解
- mybitplus name or service not known或quartz couldn‘t get host name
热门文章
- 19、mysql中定时器的创建和使用
- 数据库连接池的选择及其开发配置
- JAVA面试常考系列九
- Spring MVC 基于URL的拦截和映射规则
- Class的getName、getSimpleName与getCanonicalName的区别
- JAVAWEB(笔记)
- Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
- IDEA 底部工具栏没有 Version Control 解决办法
- windows为什么把linux打败了,快二十年了,人们为什么还是没有抛弃 Windows 转向 Linux?...
- php中时间轴,PHP时间轴函数