日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

您自己的MicroProfile Config来源

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 您自己的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来源的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。