@ConfigurationProperties在类路径

时间:2017-03-16 16:01:31

标签: java spring intellij-idea spring-boot

我尝试在 Spring Boot 中完成自定义属性。
我试图通过 IntelliJ IDEA 2016.3 创建一个简单的项目:
 1.使用 Spring Boot Initializer 创建了一个新的Gradle项目(我没有检查任何内容)。
 2.创建了一个新课程Properties  3.当我使用@ConfigurationProperties对其进行注释时,会显示下一个通知:  notification The documentation说我应该在项目中添加以下内容:

dependencies {
    optional "org.springframework.boot:spring-boot-configuration-processor"
}

compileJava.dependsOn(processResources)

之后,我尝试重建项目并在设置中启用注释处理器,但通知尚未消失。完成也不起作用(我创建了一个字符串my)。

14 个答案:

答案 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中发生这种情况的原因有两个:

  1. 再次检查是否在IDEA中选择(启用)您的设置:“首选项”->“注释处理器”->“启用注释处理”。
  2. 更新您的Idea后,请检查并更新插件。插件可能与您的新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 上的同一页面:

https://github.com/spring-guides/tut-spring-boot-kotlin/blob/master/README.adoc#configuration-properties