我尝试在 Spring Boot 中完成自定义属性。
我试图通过 IntelliJ IDEA 2016.3 创建一个简单的项目:
1.使用 Spring Boot Initializer 创建了一个新的Gradle项目(我没有检查任何内容)。
2.创建了一个新课程Properties
3.当我使用@ConfigurationProperties
对其进行注释时,会显示下一个通知:
The documentation说我应该在项目中添加以下内容:
dependencies {
optional "org.springframework.boot:spring-boot-configuration-processor"
}
compileJava.dependsOn(processResources)
之后,我尝试重建项目并在设置中启用注释处理器,但通知尚未消失。完成也不起作用(我创建了一个字符串my
)。
答案 0 :(得分:15)
我遇到了同样的问题。我用的是2017.2和gradle 4.1, 一些博客说你应该补充:
dependencies {
optional "org.springframework.boot:spring-boot-configuration-processor"
}
但我把它改成了这个:
dependencies {
compile "org.springframework.boot:spring-boot-configuration-processor"
}
警告消失了。
答案 1 :(得分:9)
根据Spring Boot docs,自Gradle 4.6以来的正确配置是
process.env.FIREBASE_CONFIG.projectId
但是IntelliJ IDEA还不支持dependencies {
annotationProcessor group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
// ...
}
范围。如果您想提请注意此问题,请{@ {3}}。
答案 2 :(得分:8)
我忘了添加propdeps-plugin。但是,我记得即使使用2016年的插件,它对我也没有用.3正如@CrazyCoder所提到的,尝试降级Gradle或下载新的2017.1版本(details)。
此外,当您解决此问题时,您可能会收到Re-run Spring Boot Configuration Annotation Processor to update generated metadata
。为此,请单击Refresh all Gradle projects
(在Gradle侧面菜单中)。
答案 3 :(得分:5)
对于Kotlin项目,自Gradle 4.6起,工作配置就使用了注释处理器
apply plugin: "kotlin-kapt"
dependencies {
kapt("org.springframework.boot:spring-boot-configuration-processor:$springBootVersion")
compileOnly("org.springframework.boot:spring-boot-configuration-processor:$springBootVersion")
}
答案 4 :(得分:3)
您必须在主类中提及要使用@ConfigurationProperties批注的类,如下所示。
@EnableConfigurationProperties(AppProperties.class)
带有@ConfigurationProperties的Property Configuration类将是这样
import org.springframework.boot.context.properties.ConfigurationProperties;
@ConfigurationProperties(prefix = "app")
public class AppProperties {
String name;
String id;
}
Main类将是这样
import com.auth2.demo.config.AppProperties;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
答案 5 :(得分:2)
对于使用Maven或Gradle的用户,只需添加对 spring-boot-configuration-processor 的依赖。
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
4.5及更低版本
dependencies {
compileOnly "org.springframework.boot:spring-boot-configuration-processor"
}
4.6版及更高版本
dependencies {
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}
有关更多信息: “使用注释处理器生成自己的元数据” https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/appendix-configuration-metadata.html#configuration-metadata-annotation-processor
答案 6 :(得分:2)
对于那些正在使用maven的人,Intellij仍然对添加依赖项感到不满意。好像通过annotationProcessorPaths
添加maven-compiler-plugin
最终驯服了野兽。
确保version
与您的spring依赖项匹配。我怀疑它已经存在于您的有效POM中。
原因:我使用的是一个自定义的父pom,它在annotationProcessorPaths
中设置了mapstruct注释处理器,并实际上触发IntelliJ要求手动指定所有其他注释处理器为好吧。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>2.0.4.RELEASE</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
答案 7 :(得分:1)
我在IntelliJ版本2018.1.2中遇到了同样的问题。我还必须定义spring-boot-configuration-processor的实际版本才能使其工作:
compile('org.springframework.boot:spring-boot-configuration-processor:2.0.1.RELEASE')
答案 8 :(得分:1)
在IntelliJ版本2018.3中,我通过以下方式解决了此问题(根据this documentation):
对于Gradle 4.5及更早版本,相关性应在 compileOnly配置,如以下示例所示:
dependencies { compileOnly "org.springframework.boot:spring-boot-configuration-processor" }
在Gradle 4.6及更高版本中,相关性应在 注解处理器配置,如以下示例所示:
dependencies { annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" }
答案 9 :(得分:1)
在IDEA中发生这种情况的原因有两个:
答案 10 :(得分:0)
以下为我的作品:
buildscript {
repositories {
jcenter()
maven { url 'https://repo.jenkins-ci.org/public/' }
maven { url 'http://repo.spring.io/plugins-release' }
}
dependencies {
classpath "io.spring.gradle:propdeps-plugin:0.0.9.RELEASE"
}
}
...
apply plugin: 'propdeps'
apply plugin: 'propdeps-eclipse'
apply plugin: 'propdeps-idea'
...
dependencyManagement {
imports {
mavenBom 'org.springframework.boot:spring-boot-starter-parent:2.0.0.RELEASE'
}
}
...
dependencies {
compile "org.springframework.boot:spring-boot-starter"
compile "org.springframework.boot:spring-boot-starter-actuator"
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor" // for @ConfigurationProperties, make sure compileJava.dependsOn(processResources)
...
}
compileJava.dependsOn(processResources)
答案 11 :(得分:0)
在maven项目中,有助于添加依赖项spring-boot-configuration-processor并使用@EnableConfigurationProperties(AppProperties.class)标记主类。
也许有人帮忙。
答案 12 :(得分:0)
根据Spring Boot docs,Gradle 4.5及更早版本的正确配置是
dependencies {
compileOnly group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
// ...
}
答案 13 :(得分:0)
Spring 的网站有一个教程,其中包含如何使其工作的很好的解释。只需按照下面“配置属性”部分下的步骤操作即可。
它具有这里没有其他答案提到的步骤之一:
手动运行 ./gradlew kaptKotlin
。
截至 2021 年 3 月,IDEA 仍会在 Kotlin 属性类的顶部显示警告,但这些属性将被识别并起作用。您将能够从 .properties
文件导航到 Kotlin 属性类,但不能反过来。
https://spring.io/guides/tutorials/spring-boot-kotlin/ 向下滚动到“配置属性”部分。
或 GitHub 上的同一页面: