Micronaut 環(huán)境

2023-02-28 17:55 更新

應(yīng)用程序環(huán)境由 Environment 接口建模,它允許在創(chuàng)建 ApplicationContext 時(shí)指定一個(gè)或多個(gè)唯一的環(huán)境名稱。

初始化環(huán)境

 Java Groovy  Kotlin 
ApplicationContext applicationContext = ApplicationContext.run("test", "android");
Environment environment = applicationContext.getEnvironment();

assertTrue(environment.getActiveNames().contains("test"));
assertTrue(environment.getActiveNames().contains("android"));
when:
ApplicationContext applicationContext = ApplicationContext.run("test", "android")
Environment environment = applicationContext.getEnvironment()

then:
environment.activeNames.contains("test")
environment.activeNames.contains("android")
val applicationContext = ApplicationContext.run("test", "android")
val environment = applicationContext.environment

assertTrue(environment.activeNames.contains("test"))
assertTrue(environment.activeNames.contains("android"))

活動(dòng)環(huán)境名稱允許根據(jù)環(huán)境加載不同的配置文件,還可以使用 @Requires 注釋有條件地加載 bean 或 bean @Configuration 包。

此外,Micronaut 會(huì)嘗試檢測(cè)當(dāng)前環(huán)境。例如,在 Spock 或 JUnit 測(cè)試中,TEST 環(huán)境會(huì)自動(dòng)激活。

可以使用 micronaut.environments 系統(tǒng)屬性或 MICRONAUT_ENVIRONMENTS 環(huán)境變量指定其他活動(dòng)環(huán)境。這些被指定為逗號(hào)分隔的列表。例如:

指定環(huán)境

$ java -Dmicronaut.environments=foo,bar -jar myapp.jar

以上激活了名為 foo 和 bar 的環(huán)境。

最后,還檢測(cè)到云環(huán)境名稱。

環(huán)境優(yōu)先

Micronaut 根據(jù)指定的環(huán)境加載屬性源,如果相同的屬性鍵存在于特定于環(huán)境的多個(gè)屬性源中,則環(huán)境順序決定使用哪個(gè)值。

Micronaut 使用以下層次結(jié)構(gòu)進(jìn)行環(huán)境處理(優(yōu)先級(jí)從低到高):

  • 推導(dǎo)環(huán)境

  • 來(lái)自 micronaut.environments 系統(tǒng)屬性的環(huán)境

  • 來(lái)自 MICRONAUT_ENVIRONMENTS 環(huán)境變量的環(huán)境

  • 通過(guò)應(yīng)用程序上下文構(gòu)建器明確指定的環(huán)境

這也適用于 @MicronautTest(environments = … )

禁用環(huán)境檢測(cè)

可以通過(guò)將 micronaut.env.deduction 系統(tǒng)屬性或 MICRONAUT_ENV_DEDUCTION 環(huán)境變量設(shè)置為 false 來(lái)禁用環(huán)境的自動(dòng)檢測(cè)。這可以防止 Micronaut 檢測(cè)當(dāng)前環(huán)境,同時(shí)仍然使用如上所示專門提供的任何環(huán)境。

通過(guò)系統(tǒng)屬性禁用環(huán)境檢測(cè)

$  java -Dmicronaut.env.deduction=false -jar myapp.jar

或者,您可以在設(shè)置應(yīng)用程序時(shí)使用 ApplicationContextBuilder deduceEnvironment 方法禁用環(huán)境推導(dǎo)。

使用 ApplicationContextBuilder 禁用環(huán)境推導(dǎo)

 Java Groovy  Kotlin 
@Test
public void testDisableEnvironmentDeductionViaBuilder() {
    ApplicationContext ctx = ApplicationContext.builder()
            .deduceEnvironment(false)
            .properties(Collections.singletonMap("micronaut.server.port", -1))
            .start();
    assertFalse(ctx.getEnvironment().getActiveNames().contains(Environment.TEST));
    ctx.close();
}
void "test disable environment deduction via builder"() {
    when:
    ApplicationContext ctx = ApplicationContext.builder().deduceEnvironment(false).start()

    then:
    !ctx.environment.activeNames.contains(Environment.TEST)

    cleanup:
    ctx.close()
}
"test disable environment deduction via builder"() {
    val ctx = ApplicationContext.builder().deduceEnvironment(false).start()
    assertFalse(ctx.environment.activeNames.contains(Environment.TEST))
    ctx.close()
}

默認(rèn)環(huán)境

Micronaut 支持一個(gè)或多個(gè)默認(rèn)環(huán)境的概念。默認(rèn)環(huán)境是僅在沒(méi)有明確指定或推導(dǎo)其他環(huán)境時(shí)才應(yīng)用的環(huán)境。可以通過(guò)應(yīng)用程序上下文構(gòu)建器 Micronaut.build().environments(… )、micronaut.environments 系統(tǒng)屬性或 MICRONAUT_ENVIRONMENTS 環(huán)境變量顯式指定環(huán)境??梢酝茢喹h(huán)境以自動(dòng)應(yīng)用適合云部署的環(huán)境。如果通過(guò)上述任何一種方式找到環(huán)境,則不會(huì)應(yīng)用默認(rèn)環(huán)境。

要設(shè)置默認(rèn)環(huán)境,請(qǐng)包含一個(gè)實(shí)現(xiàn) ApplicationContextConfigurer 并使用 ContextConfigurer 注釋的公共靜態(tài)類:

public class Application {

    @ContextConfigurer
    public static class DefaultEnvironmentConfigurer implements ApplicationContextConfigurer {
        @Override
        public void configure(@NonNull ApplicationContextBuilder builder) {
            builder.defaultEnvironments(defaultEnvironment);
        }
    }

    public static void main(String[] args) {
        Micronaut.run(Application.class, args);
    }
}

以前,我們建議使用 Micronaut.defaultEnvironments("dev"),但這不允許提前 (AOT) 編譯器檢測(cè)默認(rèn)環(huán)境。

Micronaut Banner

從 Micronaut 2.3 開始,應(yīng)用程序啟動(dòng)時(shí)會(huì)顯示一個(gè)橫幅。它默認(rèn)啟用,它還顯示 Micronaut 版本。

$ ./gradlew run
 __  __ _                                  _
|  \/  (_) ___ _ __ ___  _ __   __ _ _   _| |_
| |\/| | |/ __| '__/ _ \| '_ \ / _` | | | | __|
| |  | | | (__| | | (_) | | | | (_| | |_| | |_
|_|  |_|_|\___|_|  \___/|_| |_|\__,_|\__,_|\__|
  Micronaut (3.8.6)

17:07:22.997 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 611ms. Server Running: http://localhost:8080

要使用您自己的 ASCII 藝術(shù)(此時(shí)只是普通的 ASCII)自定義橫幅,請(qǐng)創(chuàng)建文件 src/main/resources/micronaut-banner.txt,它將被使用。

要禁用它,請(qǐng)修改您的應(yīng)用程序類:

public class Application {

    public static void main(String[] args) {
        Micronaut.build(args)
                 .banner(false) (1)
                 .start();
    }
}
  1. 禁用 banner


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)