您自己的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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

antd 3升级命令_是时候拥有一个你自己的命令行工具了

本篇博客主要介绍了如何使用commander, inquirer以及chalk从零开始&#xff0c;创建属于自己的命令行工具。0. 一分钟体验首先我们先花一分钟的时间&#xff0c;体验一下创建自己的命令行cli工具是什么感觉。0.1. 新建项目目录假如我们的项目名称叫hello-cli&#xff0c;使用如…

找不到要去的声明_老汉将行李袋交由他人看管 去了一趟卫生间找不到人了.........

春节走亲访友难免多喝两杯&#xff0c;但酒后乘车却容易造成财物遗失。目前正值春运返程高峰&#xff0c;从沧州女儿家返程回山东老家的蔡先生就因为中午多喝了几杯酒&#xff0c;便将装有12000元生活费的行李袋弄丢了。好在沧州火车站派出所民警最终将蔡先生的失物找回&#x…

tpcc mysql优化_tpcc_mysql性能测试

. bzr branch lp:~percona-dev/perconatools/tpcc-mysql该方法需要下载bzr工具&#xff0c;还要在网站注册并添加SSH KEY&#xff0c;非常麻烦&#xff0c;并且还没有成功(卡在SSH KEY上)。2. 直接在 http://bazaar.launchpad.net/~percona-dev/perconatools/tpcc-mysql/files …

使用混合多云每个人都应避免的3个陷阱(第3部分)

每天都在肆意宣传云&#xff0c;但每个人都应避免三个陷阱。 从云&#xff0c;混合云到混合多云&#xff0c;您被告知这是确保业务数字化未来的一种方式。 您必须做出的这些选择不会排除提高客户体验和敏捷交付这些应用程序的日常工作。 让我们开始一段旅程&#xff0c;仔细研…

java可视化压缩_web可视化技术发展(1/6)

EverCraft一直在关注Web可视化技术的发展&#xff0c;在本系列文章里&#xff0c;小编将对国外一篇感觉很不错的综述性文章进行翻译&#xff0c;供这一领域的爱好者相互学习。这篇paper的信息为&#xff1a;“Mwalongo, F., et al., State-of-the-Art Report in Web-based Visu…

suse11 rpm 安装mysql_SuSE11安装MySQL5.7.22:RPM安装方式

摘要&#xff1a;SuSE11sp3 64位操作系统、 MySQL5.7.22 rpm安装包5.7版本与先前版本安装有所区别&#xff0c;需要注意注&#xff1a;kingtry是我的主机名一、环境准备操作系统&#xff1a;SuSE版本11sp3&#xff0c;64位kingtry:~ # uname -aLinux kingtry 3.0.76-0.11-defau…

python有多少库存_库存究竟多少才算合理?

本文摘自以上刘宝红老师著作。作为库存计划人员&#xff0c;不管你的库存周转多快&#xff0c;总有人挑战你&#xff0c;说你的库存不合理。不合理&#xff0c;其实是太高的代名词。不过想想看&#xff0c;每一分钱的库存都不是凭空而来&#xff0c;都是为了特定的业务需求而设…

java中iterator_如何在Java中读取CSV文件-Iterator和Decorator的案例研究

java中iterator在本文中&#xff0c;我将讨论如何使用Apache Common CSV读取CSV&#xff08;逗号分隔值&#xff09;文件。 从这个案例研究中&#xff0c;我们将学习如何在设计模式的上下文中使用Iterator和Decorator来提高不同情况下的可重用性。 但是在开始之前&#xff0c;我…

屏幕坏点检测图片_电视屏幕出现坏点?行家会这样做!

液晶电视经常会有几个亮点或暗点&#xff0c;这些通常被称为电视坏点。作为强迫症患者&#xff0c;面对这些屏幕坏点我们应该怎么做&#xff1f;下面跟小智聊聊这个问题吧&#xff01;首先&#xff0c;坏点形成的原因首先是因为液晶屏幕由很多点组成&#xff0c;每个点由RGB三原…

python中int函数的用法浅析_Python中int()函数的用法浅析

int()是Python的一个内部函数Python系统帮助里面是这么说的>>> help(int)Help on class int in module __builtin__:class int(object)| int(x[, base]) -> integer|| Convert a string or number to an integer, if possible. A floating point| argument will be…

Java:GraalVM数据库流性能

GraalVM是JVM块的新成员。 它是一个开源虚拟机&#xff0c;能够同时运行多种编程语言&#xff0c;例如Java&#xff0c;Rust和JavaScript。 GraalVM还有一个新的内部代码优化器管道&#xff0c;在某些情况下&#xff0c;与其他JVM相比&#xff0c;它可以显着提高性能。 了解如何…

kubelet启动失败_kubelet 架构浅析

一、概要kubelet 是运行在每个节点上的主要的“节点代理”&#xff0c;每个节点都会启动 kubelet进程&#xff0c;用来处理 Master 节点下发到本节点的任务&#xff0c;按照 PodSpec 描述来管理Pod 和其中的容器&#xff08;PodSpec 是用来描述一个 pod 的 YAML 或者 JSON 对象…

shell 提取sql 的字段名表名_SQL代码风格规范

作为新时代SQL Boy&#xff0c;大部分时间都是在写sql&#xff0c;很多时候看到别人写的代码实在是不规范&#xff0c;命名随便写&#xff0c;没有缩进&#xff0c;看起来很没有逻辑性&#xff0c;今天分享下我自己的一些规范&#xff0c;从这里修改而来。--名称&#xff1a;xx…

亚马逊ec2 实例删除_亚马逊免费使用套餐:在EC2 Linux实例上安装Tomcat 7

亚马逊ec2 实例删除Amazon Web Services提供了12个月的免费使用期限&#xff0c;使开发人员可以在云中运行任何他们想要的东西。 免费层包括14个服务&#xff0c;其中Web开发人员最关注EC2服务。 EC2是一项服务&#xff0c;通过停止和启动Windows和/或Linux的虚拟实例来提供可调…

carbondata与mysql_Apache CarbonData 1.4.0 中文文档

故障排除本教程旨在为正在构建&#xff0c;部署和使用 CarbonData 的用户和开发人员提供故障排除。当加载数据时&#xff0c;遇到 tablestatus.lock 问题:现象17/11/11 16:48:13 ERROR LocalFileLock: main hdfs:/localhost:9000/carbon/store/default/hdfstable/tablestatus.l…

使用混合多云每个人都应避免的3个陷阱(第4部分)

每天都在肆意宣传云&#xff0c;但每个人都应避免三个陷阱。 从云&#xff0c;混合云到混合多云&#xff0c;您被告知这是确保业务数字化未来的一种方式。 您必须做出的这些选择不会排除提高客户体验和敏捷交付这些应用程序的日常工作。 让我们开始一段旅程&#xff0c;仔细研…

mysql语句使用_Mysql基本使用语句

数据库端口号&#xff1a;Mysql:3306 Orasle:1521 Sqlserver:1443DML&#xff1a; 数据操作语言(检索或者修改数据)DDl&#xff1a;数据定义语言(定义数据结构&#xff0c;比如创建、修改或删除数据库的对象)DCl&#xff1a;数据控制语言(用于定义数据库用户的权限)DML&#xf…

python getattr_Python中的getattr()函数详解:

标签&#xff1a;Python中的getattr()函数详解:getattr(object, name[, default]) -> valueGet a named attribute from an object; getattr(x, ‘y‘) is equivalent to x.y.When a default argument is given, it is returned when the attribute doesn‘texist; without …

python内核死亡的原因_Python的内核由于DLL而死亡

对于机器学习课程&#xff0c;我正在用python做练习。我们的作业必须使用Jupyter笔记本。虽然这在我的笔记本电脑和我的办公桌上运行得很好&#xff0c;但我不能在家里的桌面上运行任何东西。在因为我不确定是否允许我发布给我们的样板代码&#xff0c;我不会这样做。但无论如何…

Java,JavaFX的流畅设计风格拨动开关

嗨&#xff0c;这次我将在新版本的JMetro中讨论新的Toggle Switch样式。 拨动开关是一种近年来变得非常流行的控件。 我前一段时间在ControlsFX库中添加了JavaFX实现。 刚刚发布的JMetro版本4.1中提供了此新样式。 什么是拨动开关 在以前的文章中&#xff0c;我谈到了切换开…