如何在 quarkus kotlin 中设置配置属性

Mar*_*arc 3 config kotlin quarkus

在 quarkus Java 中,您可以通过在 application.properties 中定义配置属性来设置它。这可以在某些类中使用,如下所示:

@ApplicationScoped
public class SomeClass {
    @ConfigProperty(name = "some.config")
    String someConfig;
}
Run Code Online (Sandbox Code Playgroud)

如何在 Kotlin 中实现同样的目标?

geo*_*and 8

与 Kotlin 的一对一转换将产生:

import org.eclipse.microprofile.config.inject.ConfigProperty
import jakarta.enterprise.context.ApplicationScoped

@ApplicationScoped
open class SomeClass {

    @field:ConfigProperty(name = "some.config")
    lateinit var someConfig: String
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您像这样使用构造函数注入,看起来会好得多:

import org.eclipse.microprofile.config.inject.ConfigProperty
import jakarta.enterprise.context.ApplicationScoped

@ApplicationScoped
open class SomeClass(@ConfigProperty(name = "some.config") val someConfig: String) {

}
Run Code Online (Sandbox Code Playgroud)

定义后,在其他类中使用:

import jakarta.ws.rs.GET
import jakarta.ws.rs.Path
import jakarta.ws.rs.Produces
import jakarta.ws.rs.core.MediaType
import jakarta.inject.Inject
import jakarta.enterprise.inject.Default

@Path("/hello")
class GreetingResource {

    @Inject
    @field: Default 
    lateinit var service: SomeClass

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    fun hello() = "Hello from " + service.someConfig
}
Run Code Online (Sandbox Code Playgroud)

或者再次使用构造函数注入:

import jakarta.ws.rs.GET
import jakarta.ws.rs.Path
import jakarta.ws.rs.Produces
import jakarta.ws.rs.core.MediaType
import jakarta.inject.Inject
import jakarta.enterprise.inject.Default

@Path("/hello")
class GreetingResource(
    val service: SomeClass
) {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    fun hello() = "Hello from " + service.someConfig
}
Run Code Online (Sandbox Code Playgroud)