我正在编写配置属性,并希望使用数据类来保存数据。
问题是,数据类具有主构造函数且是不可变的,并且micronaut尝试将值作为bean注入。
示例:
@ConfigurationProperties("gerencianet")
data class GerenciaNetConfiguration(
val clientId: String,
val clientSecret: String,
val apiUrl: String,
val notificationUrl: String,
val datePattern: String = "yyyy-MM-dd HH:mm:ss"
)
错误:Caused by: io.micronaut.context.exceptions.NoSuchBeanException: No bean of type [java.lang.String] exists. Make sure the bean is not disabled by bean requirements
有支持吗?
答案 0 :(得分:0)
您可以选择执行以下操作:
import io.micronaut.context.annotation.ConfigurationBuilder
import io.micronaut.context.annotation.ConfigurationProperties
@ConfigurationProperties("my.engine")
internal class EngineConfig {
@ConfigurationBuilder(prefixes = ["with"])
val builder = EngineImpl.builder()
@ConfigurationBuilder(prefixes = ["with"], configurationPrefix = "crank-shaft") / <3>
val crankShaft = CrankShaft.builder()
@set:ConfigurationBuilder(prefixes = ["with"], configurationPrefix = "spark-plug")
var sparkPlug = SparkPlug.builder()
}
您还可以使用@Value
将这些值作为构造函数参数注入。
我希望有帮助。
答案 1 :(得分:0)
您可以使用@Parameter
将值作为构造函数参数注入。 avoids common mistakes with @Value
。
例如,如果您的application.yml
如下所示:
group:
first-value: asdf
second-value: ghjk
然后Kotlin类可能如下:
import io.micronaut.context.annotation.Property
import javax.inject.Singleton
@Singleton
class MyClass(@Property(name = "group.first-value") val firstValue: String) {
fun doIt(): String {
return firstValue
}
}
或者类似的方法:
import io.micronaut.context.annotation.Factory
import io.micronaut.context.annotation.Property
import javax.inject.Singleton
@Factory
class MyFactory {
@Singleton
fun getSomeValue(@Property(name = "group.first-value") firstValue: String): SomeClass {
return SomeClass.newBuilder()
.setTheValue(firstValue)
.build()
}
}