当前位置: 首页 > 知识库问答 >
问题:

科特林

邵祺
2023-03-14

如何在使用Kotlin的Spring Boot中正确初始化ConfigurationProperties?

目前我喜欢下面的例子:

 @ConfigurationProperties("app")
 class Config {
     var foo: String? = null
 }

但是它看起来很丑陋,实际上foo不是一个variable,foo是常量value,应该在启动期间初始化,将来不会改变。

共有3个答案

刘承悦
2023-03-14

更新:从Spring Boot 2.2.0开始,您可以使用以下数据类:

@ConstructorBinding
@ConfigurationProperties("example.kotlin")
data class KotlinExampleProperties(
        val name: String,
        val description: String,
        val myService: MyService) {

    data class MyService(
            val apiToken: String,
            val uri: URI
    )
}

如需进一步参考,请参阅官方文件。

从Spring Boot 2.2.0开始过时,问题已解决

正如文档中所述:为了使用ConfigurationProperties,必须提供“Javabean”。这意味着您的属性需要有getter和setter,因此val目前是不可能的。

getter和setter通常是必需的,因为绑定是通过标准的JavaBeans属性描述符进行的,就像SpringMVC一样。在某些情况下,可以省略setter[…]

Spring Boot 2.2.0已经解决了这一问题,预计很快就会发布:https://github.com/spring-projects/spring-boot/issues/8762

阎庆
2023-03-14

使用新的Spring Boot 2.2,您可以这样做:

@ConstructorBinding
@ConfigurationProperties(prefix = "swagger")
data class SwaggerProp(
    val title: String, val description: String, val version: String
)

别忘了在build.gradle.kts中的依赖项中包含此内容:

dependencies {
  annotationProcessor("org.springframework.boot:spring-boot-configuration-processor")
}
公西博实
2023-03-14

下面是我如何让它与我的应用程序一起工作。yml文件。

myconfig:
  my-host: ssl://example.com
  my-port: 23894
  my-user: user
  my-pass: pass

以下是kotlin文件:

@Configuration
@ConfigurationProperties(prefix = "myconfig")
class MqttProperties {
    lateinit var myHost: String
    lateinit var myPort: String
    lateinit var myUser: String
    lateinit var myPass: String    
}

这对我来说很棒。

 类似资料:
  • 问题内容: 我正在学习具有C ++和Java背景的Kotlin。我期待下面的打印,不。我知道这对应到。默认实现不比较每个成员,即和吗?如果是这样,它会不会看到字符串值相等(因为再次映射到字符串值)?显然,我在Kotlin中还没有涉及平等与身份相关的问题。 问题答案: 您描述的默认实现仅适用于数据类。不适用于从中继承实现的常规类,只需使对象与自身相等即可。

  • 这是正确的吗? 我可以找到一个相关的问题,但它是有参数的,我不能在没有params的情况下转换它。

  • 我正在尝试IntDef typedef将特定类型的参数限制为函数。但是当我使用Java使用IntDef时,它工作正常,但同时,它不适用于kotlin。以下是我的代码片段 - 在JAVA中- 在静态编程语言中- 在课堂上使用- 调用演示函数给我一个错误消息,说它必须是:< code>TransTypeJava之一。CASH,< code>TransTypeJava。通过传递< code>TransT

  • 我有静态编程语言界面 我如何从爪哇调用它?什么

  • 我在一般类型中迷失了很多个小时。我想简化代码,但我不能强制转换对象时,它的泛型类型。我如何解决这个问题或另一个简化的方法? 错误: