Kotlin Micronaut无法加载application.yml中SFTP配置属性问题
问题解析与解决方案
核心问题
你手动调用SftpConfig()构造方法创建实例的操作,完全绕过了Micronaut的IoC容器管理和配置绑定机制。Micronaut只会对它自己实例化并纳入容器管理的Bean执行配置属性注入,手动new出来的对象不会被容器处理,自然加载不到application.yml里的配置值,导致lateinit属性未初始化。
正确实现方式
直接通过@Inject注入容器已经初始化好的SftpConfig实例,不要自行new:
错误写法(导致问题)
@Singleton class SftpService { private val sftpConfig = SftpConfig() // 手动实例化,不触发配置绑定 }
正确写法
@Singleton class SftpService { @Inject lateinit var sftpConfig: SftpConfig // 注入容器管理的配置Bean // 或者用构造方法注入(更推荐) constructor(private val sftpConfig: SftpConfig) }
额外验证点
- 确保
SftpConfig类上的@ConfigurationProperties注解前缀和application.yml中的配置前缀完全匹配,比如:
对应的application.yml配置:@ConfigurationProperties("sftp") class SftpConfig { lateinit var username: String lateinit var host: String // 其他属性 }sftp: username: test-user host: 192.168.1.100 - 确认
SftpConfig没有被排除在组件扫描之外,类所在包是Micronaut默认扫描的范围,或者通过@MicronautApplication的packages属性指定了扫描路径。
内容的提问来源于stack exchange,提问作者Tech Noob
相关产品推荐
相关产品推荐

