【问题标题】:How to initialize ApplicationContext and/or Environment如何初始化 ApplicationContext 和/或 Environment
【发布时间】:2019-02-25 15:17:39
【问题描述】:

典型的应用程序入口点如下所示:

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

但是,文档表明可以自定义环境和应用程序上下文:

例如https://docs.micronaut.io/1.1.0.M1/guide/index.html#propertySource

void initializeTheEnvironment() {
    ...
    ApplicationContext applicationContext = ApplicationContext.run(
            PropertySource.of(
                    "test",
                    CollectionUtils.mapOf(
                        "micronaut.server.host", "foo",
                        "micronaut.server.port", 8080
                    )
            ),
            "test", "android");
    Environment environment = applicationContext.getEnvironment();

    ... what to put here to then run the application using the customizations above ... ?
}

如果我: - 自定义环境(类似于上面) - 将环境实例注入控制器 - 然后,要启动应用程序,我只需继续使用 Micronaut.run()

...然后我可以看到我的自定义在注入的 Environment 实例中不可见。

问题:给定一个初始化的 ApplicationContext 和/或 Environment,我如何使用该环境运行应用程序?

有没有办法将这些构造的对象传递给 Micronaut.run(...) ?

这是否不必要,因为 Micronaut 在幕后以某种方式获取了已经初始化的对象实例?

我可能遗漏了一些非常明显的东西,或者这根本不是使用框架的预期方式,但我很好奇,因为文档在一些地方明确调用了这种自定义......

【问题讨论】:

  • 您只是想配置一个环境吗?为什么以编程方式?您可以为此使用 application.yml。您还可以使用运行时配置 bash 脚本来设置环境变量并使用 ${} 语法将它们加载到 .yml 中。或者您可以设置要使用的 .yml(第 4.2 节“包含的 PropertySource 加载器”最底部的“提示”文本)。
  • 感谢詹姆斯和布鲁克斯。我只是想更好地理解底层架构是如何工作的。我同意我们通常不会手动配置环境等,但是我很困惑为什么这些示例说明了这一点,然后我不知道如何将其放入我的测试应用程序中。当然,一旦我看到詹姆斯在下面的回复就很明显了!

标签: micronaut


【解决方案1】:

您可以执行以下操作来实现您想要的:

Micronaut.build()
    .mainClass(Application.class)
    .propertySources(PropertySource.of(
        "test",
        CollectionUtils.mapOf(
            "micronaut.server.host", "foo",
            "micronaut.server.port", 8080
        )
    ))
    .environments("test", "android")
    .start()

【讨论】:

  • 是的,一旦你发帖就很明显了 :) 谢谢詹姆斯!
猜你喜欢
  • 2017-07-18
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2018-11-24
  • 2013-10-18
  • 1970-01-01
  • 2014-01-09
相关资源
最近更新 更多