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 的效果方式?

Spring Boot 2 和 Kotlin(使用 Maven)