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

Spring嵌套配置属性和静态编程语言

印振国
2023-03-14

我想在spring boot中使用嵌套的ConfigurationProperties,它在java中工作,但在kotlin中不工作。我的应用程序属性中有以下行:

cert.signing-cert.filePath=truststore.jks
cert.signing-cert.password=xxxx
cert.private-signing.filePath=sign_test.p12
cert.private-signing.password=xxxx
cert.private-encrpytion.filePath=encryption_test.p12
cert.private-encrpytion.password=xxx

我创建了这个结构来处理这些属性:

@Component
@ConfigurationProperties("cert")
class CertConfig {
    lateinit var signingCert: SigningCert
    lateinit var privateSigning: PrivateSigning
    lateinit var privateEncrpytion: PrivateEncrpytion

    class SigningCert {
        lateinit var filePath: String
        lateinit var password: String
    }

    class PrivateSigning {
        lateinit var filePath: String
        lateinit var password: String
    }

    class PrivateEncrpytion {
        lateinit var filePath: String
        lateinit var password: String
    }
}

我添加了 kapt 插件和依赖项到我的构建.gradle.kts

    kotlin("kapt") version "1.3.50"
...
    kapt("org.springframework.boot:spring-boot-configuration-processor")
    implementation("org.springframework.boot:spring-boot-configuration-processor")

当我运行这段代码时,我得到了一个异常:

Caused by: kotlin.UninitializedPropertyAccessException: lateinit property signingCert has not been initialized

共有1个答案

施凡
2023-03-14

我忘了初始化属性。

 var signingCert: SigningCert = SigningCert()
 var privateSigning: PrivateSigning = PrivateSigning()
 var privateEncrpytion: PrivateEncrpytion = PrivateEncrpytion()
 类似资料:
  • 是否有可能在Kotlin 属性初始化之前从其获取< code>::class.java? 从逻辑上讲,它应该可以工作——我试图获取一个类而不是一个值,但实际上它在未初始化的属性访问异常时失败。 请注意,我试图获取类的属性位于泛型类中,其类型是泛型参数之一: 我需要这个类来创建的实例 当然,我不能做到: 对此有什么解决办法吗?

  • 我有一个名为CommonConfig的配置类,到目前为止它工作得很好… 以及与之配套的Yaml属性文件: 我的问题开始于当我想把一个映射到子B中时: 我尝试在SubB类中添加一个简单的映射声明: 当我运行这个时,所有其他属性都在配置中,但映射是空的。我还尝试不初始化映射,但它保持为空。 我的SpringBootApplication类以前只使用了一个注释就可以很好地工作。基于其他一些StackOv

  • 问题内容: 我有一个对象,它可以是任何数量的深度,并且可以具有任何现有属性。例如: 在此我想设置(或覆盖)属性,如下所示: 属性字符串可以具有任何深度,并且值可以是任何类型/事物。 如果属性键已经存在,则不需要合并对象和数组作为值。 前面的示例将产生以下对象: 如何实现这种功能? 问题答案: 此函数使用您指定的参数应添加/更新容器中的数据。请注意,您需要跟踪架构中的哪些元素是容器,哪些是值(字符串

  • 我有一个对象,可以是任何数量的层次深,可以有任何现有的属性。例如: 在此基础上,我希望设置(或覆盖)如下属性: 属性字符串可以有任何深度,值可以是任何类型/事物。 如果属性键已经存在,则不需要合并作为值的对象和数组。 上一个示例将生成以下对象: 如何实现这样的功能?

  • 我们可以把一个方法赋值给类的函数本身,而不是赋给它的 "prototype"。这样的方法被称为 静态的(static)。 在一个类中,它们以 static 关键字开头,如下所示: class User { static staticMethod() { alert(this === User); } } User.staticMethod(); // true 这实际上跟直接将其

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?