Kotlin使用SpringBoot的ConfigurationProperties注解,配置文件没有提示解决方案。
Posted My_king-Arthur
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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<String>) {
runApplication<EasyQuestionnaireApplication>(*args)
}
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
测试用例
@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
<plugins>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<executions>
<!-- 需要添加 开始 -->
<execution>
<id>kapt</id>
<goals>
<goal>kapt</goal>
</goals>
<configuration>
<annotationProcessorPaths>
<annotationProcessorPath>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<!-- 你自己的springboot版本 -->
<version>${springboot.version}</version>
</annotationProcessorPath>
</annotationProcessorPaths>
</configuration>
</execution>
<!-- 需要添加 结束 -->
</executions>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-allopen</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-noarg</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
</plugin>
</plugins>
每次生成 spring-configuration-metadata.json 文件时需要执行编译命令
mvn compile
结果
做完上面的步骤之后,成功的生成了 spring-configuration-metadata.json 文件,IDEA也可已正常的在 application.yaml 文件中进行提示。
以上是关于Kotlin使用SpringBoot的ConfigurationProperties注解,配置文件没有提示解决方案。的主要内容,如果未能解决你的问题,请参考以下文章
在 kotlin 的 springboot 测试中使用和不使用 @Autowired Constructor 有啥区别
SpringBoot + Jackson + Kotlin 数据类:忽略字段注释
Kotlin使用SpringBoot的ConfigurationProperties注解,配置文件没有提示解决方案。
如何使用 SpringBoot2、JUnit5 和 Kotlin 将配置属性注入单元测试
如何使用 Kotlin 在 Android 中处理从 Firebase Remote Config 解析 JSON 的效果方式?