如何在 micronaut 中使用环境特定变量?

How can I use environment specific variables in micronaut?

一般来说,我是 micronaut 和服务器端编程的新手。不幸的是,micronaut 文档对我来说意义不大,因为我没有 Java 背景。很多像“ApplicationContext”这样的术语在英语中是有意义的,但我不知道如何在实践中使用它们。

尝试从一个非常基本的应用程序开始,该应用程序根据其所在的环境打印不同的配置(“localhost”、“dev”、“prod”)。

这是我的控制器

@Controller("/")
class EnvironmentController {

    // this should return "localhost", "DEV", "PROD" depending on the environment
    @Get("/env")
    @Produces(MediaType.TEXT_PLAIN)
    fun env() = "???" // what should I put here ?

    // this should return the correct mongodb connection string for the environment
    @Get("/mongo")
    @Produces(MediaType.TEXT_PLAIN)
    fun mongo() = "???" // what should I put here ?
}

这是application.yml。理想情况下,我会为每个环境准备 1 个 yml 文件

micronaut:
  application:
    name: myApp
  server:
    port: 8090

environment: localhost

mongodb:
  uri: 'mongodb://localhost:27017'

Application.ktmn cli 工具生成的其余文件保持不变。如何设置每个环境参数,或者在启动 micronaut 时将 yml 文件作为参数传递?

关于这个有什么约定吗?

您可以使用 -Dmicronaut.environments 指定环境,或者通过在您的应用程序 class.

的上下文构建器 Micronaut.run 中指定它们

https://docs.micronaut.io/latest/guide/index.html#environments

然后例如 application-env.yml 将被加载。

https://docs.micronaut.io/latest/guide/index.html#propertySource

文档对此非常清楚

默认情况下,Micronaut 只查找 application.yml。然后,对于测试、开发和生产,它加载 application.yml 并用 application-test.yml、application-dev.yml 和 application-prod.yml 中定义的值覆盖那里的任何值 如果要启用任何其他环境,则需要手动执行

public static void main(String[] args) {
    Micronaut.build(args)
             .mainClass(Application.class)
             .defaultEnvironments("dev")
             .start();
}

https://docs.micronaut.io/latest/guide/index.html#_default_environment