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

2vuwiymt  于 2023-08-06  发布在  Kotlin
关注(0)|答案(3)|浏览(139)

一般来说,我对microaut和服务器端编程是新手。不幸的是,micronaut文档对我来说没有太大意义,因为我没有Java背景。很多像“应用上下文”这样的术语在英语中是有意义的,但我不知道如何在实践中使用它们。
尝试从一个非常基本的应用程序开始,根据它所处的环境打印不同的配置(“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.kt不受mn cli工具生成的其余文件的影响。如何设置每个环境参数,或者在启动micronaut时将yml文件作为参数传递?
这方面有什么约定吗?

bxfogqkk

bxfogqkk1#

您可以使用-Dmicronaut.environments来指定环境,也可以在Application类的上下文构建器Micronaut.run中指定它们。
https://docs.micronaut.io/latest/guide/index.html#environments
例如,application-env.yml将被加载。
https://docs.micronaut.io/latest/guide/index.html#propertySource
文件上写得很清楚

jdg4fx2g

jdg4fx2g2#

默认情况下,Micronaut仅查找application. yml。然后,对于tests、dev和prod,它加载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

zzzyeukh

zzzyeukh3#

为了能够在控制器和其他类中使用环境特定的变量,我们必须将它们注入到字段中。
属性值可以与@Value@Property@ConfigurationProperties注解一起加载。

@Property(name='app.message', defaultValue = 'unknown')    
private String message

@Property(name='env.test', defaultValue = 'env.test not set')
private String envt

@Property(name='env.dev', defaultValue = 'env.dev not set')
private String envd

字符串
假设app.message是在开发环境和测试环境中定义的,它是从最后定义的属性源加载的。(例如,在MICRONAUT_ENVIRONMENTS=dev,test中,测试定义在最后并优先。)
如果env.test是在测试环境中定义的,则从application-test.properties属性源加载它。同样,env.dev也从application-dev.properties加载。
还要注意的是,只有当 * 未检测到其他活动环境 * 时,才会应用程序构建器的defaultEnvironments方法设置的默认环境。否则,将忽略默认环境。

相关问题