Kotlin使用SpringBoot的ConfigurationProperties注解,配置文件没有提示解决方案。

问题

Kotlin使用@ConfigurationProperties注解,编辑 application.yaml 文件没有相应提示。

配置类

@ConstructorBinding
@ConfigurationProperties(prefix = "application")
data class AppConfig(
    val storage: AppConfigStorage,
)

data class AppConfigStorage(
    val namespace: String,
)

启动类

@ConfigurationPropertiesScan
@SpringBootApplication
class EasyQuestionnaireApplication

fun main(args: Array) {
    runApplication(*args)
}

pom.xml


    
        org.springframework.boot
        spring-boot-configuration-processor
        true
    

测试用例

@SpringBootTest
internal class AppConfigTest {

    @Autowired
    private lateinit var appConfig: AppConfig

    @Test
    fun test() {
        println("""namespace:${appConfig.storage.namespace}""")
    }
}

可以正常运行,但是 application.yaml 文件没有提示。

尝试打开IDEA的设置,勾选 Annotation Processors -> Enable annotation Pprocessors ,也没有产生作用

原因

通过查看target目录下生成的文件,发现 spring-configuration-metadata.json 文件没有正常生成。

解决方案

我在 stackoverflow 发现了相关问题。

最终在 github 找到了解决方案。

在 pom.xml 添加 execution


    
        org.jetbrains.kotlin
        kotlin-maven-plugin
        
            
            
                kapt
                
                    kapt
                
                
                    
                        
                            org.springframework.boot
                            spring-boot-configuration-processor
                            
                            ${springboot.version}
                        
                    
                
            
            
        
        
            
                org.jetbrains.kotlin
                kotlin-maven-allopen
                ${kotlin.version}
            
            
                org.jetbrains.kotlin
                kotlin-maven-noarg
                ${kotlin.version}
            
        
    

每次生成 spring-configuration-metadata.json 文件时需要执行编译命令

mvn compile

结果

做完上面的步骤之后,成功的生成了 spring-configuration-metadata.json 文件,IDEA也可已正常的在 application.yaml 文件中进行提示。

你可能感兴趣的:(Kotlin使用SpringBoot的ConfigurationProperties注解,配置文件没有提示解决方案。)