我正在使用带有Kotlin的Spring Boot 2构建应用程序。
我以某种方式无法使ConfigurationProperties正常工作。
据我所知,当Maven compile运行时, spring-configuration- metadata.json应该在target/classes/META-INF
compile
spring-configuration- metadata.json
target/classes/META-INF
到目前为止,我的设置:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.brabantia.log</groupId> <artifactId>logdb</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>logdb</name> <description>Logging database Brabantia</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <kotlin.version>1.2.21</kotlin.version> <spring.boot.version>2.0.0.RELEASE</spring.boot.version> </properties> <dependencies><!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter --> <!-- START SPRING BOOT DEPENDENCIES --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> <version>${spring.boot.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>${spring.boot.version}</version> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>${spring.boot.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <version>${spring.boot.version}</version> <scope>runtime</scope> </dependency> <!-- END SPRING BOOT DEPENDENCIES --> <!-- START FLYWAY DEPENDENCIES --> <dependency> <groupId>org.flywaydb</groupId> <artifactId>flyway-core</artifactId> </dependency> <!-- END FLYWAY DEPENDENCIES --> <!-- START KOTLIN DEPENDENCIES --> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-stdlib-jdk8</artifactId> <version>1.2.30</version> </dependency> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-reflect</artifactId> <version>1.2.30</version> </dependency> <!-- END KOTLIN DEPENDENCIES --> <!-- START DATABASE DEPENDENCIES --> <dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <scope>runtime</scope> </dependency> <!-- END DATABASE DEPENDENCIES --> </dependencies> <build> <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory> <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <artifactId>kotlin-maven-plugin</artifactId> <groupId>org.jetbrains.kotlin</groupId> <configuration> <args> <arg>-Xjsr305=strict</arg> </args> <compilerPlugins> <plugin>spring</plugin> </compilerPlugins> </configuration> <dependencies> <dependency> <groupId>org.jetbrains.kotlin</groupId> <artifactId>kotlin-maven-allopen</artifactId> <version>${kotlin.version}</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> </plugin> <plugin> <groupId>org.flywaydb</groupId> <artifactId>flyway-maven-plugin</artifactId> <version>5.0.7</version> <configuration> <user>esb_logging_user</user> <password>esb_logging_user</password> <url>jdbc:sqlserver://localhost;database=esb_logging</url> </configuration> </plugin> </plugins> </build> </project>
import org.springframework.boot.context.properties.ConfigurationProperties import org.springframework.context.annotation.Configuration @Configuration @ConfigurationProperties(prefix = "logdb") class LogDbProperties { var enabled: Boolean = false }
import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.CommandLineRunner import org.springframework.boot.autoconfigure.SpringBootApplication import org.springframework.boot.runApplication @SpringBootApplication class LogdbApplication: CommandLineRunner { override fun run(vararg args: String?) { println(logDbProperties.enabled) } @Autowired lateinit var logDbProperties: LogDbProperties } fun main(args: Array<String>) { runApplication<LogdbApplication>(*args) }
我该如何工作?
似乎注解是由Spring拾取的,但是IntelliJ只是不创建spring-configuration- metadata.json文件,这意味着仅自动完成无法正常工作。
那么如何让IntelliJ创建spring-configuration-metadata.json文件?
spring-configuration-metadata.json
只是为了使解决方案完整:
将以下依赖项添加到pom.xml
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
并且(这是所有其他答案都缺失的内容)将此执行添加到 kotlin-maven-plugin
kotlin-maven-plugin
<execution> <id>kapt</id> <goals> <goal>kapt</goal> </goals> <configuration> <sourceDirs> <sourceDir>src/main/kotlin</sourceDir> </sourceDirs> <annotationProcessorPaths> <annotationProcessorPath> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>1.5.3.RELEASE</version> </annotationProcessorPath> </annotationProcessorPaths> </configuration> </execution>
现在是一个示例ConfigurationProperties类:
@ConfigurationProperties(prefix = "logdb") class LogDbProperties { var enabled: Boolean = false }
现在运行mvn compile或mvn clean compile
mvn compile
mvn clean compile
和急:你有一个文件名为 spring-configuration-metadata.json在target/classes/META-INF。