繁体   English   中英

Spring boot @ConfigurationProperties 不起作用

[英]Spring boot @ConfigurationProperties not working

我正在使用@ConfigurationProperties来自动配置属性。 我的代码在 IDE 中工作。 但是当我在命令行中运行 jar 时,它不起作用。

配置类:

@Configuration
@ConfigurationProperties(prefix="location")
public class Location {

private String base;

public String getBase() {
    return base;
}

public void setBase(String base) {
    this.base = base;
}
}

主要类:

@SpringBootApplication
@EnableConfigurationProperties(Location.class)
@EnableAutoConfiguration
public class Application {

public static void main(String[] args) {

    SpringApplication.run(Application.class, args);
}
}

应用程序.yml:

location:
 base: c:\test

如果我autowire Location 类,我会看到创建了一个实例。 但是没有设置属性。 代码没有进入setBase()方法。

应用程序在控制台中打印此内容。

AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' 
annotation found and supported for autowiring

确保 application.yml 文件位于类路径的根目录中,通常它放在资源文件夹中。

未调用 setBase() 方法这一事实表明未找到您的 application.yml 文件。 Spring 在类路径的根目录中查找 application.yml 文件。

M. Deinum 的评论是正确的,说您重复的注释将导致 Location 类的 2 个 spring bean。 但是,正如您所说,您设法在没有收到错误的情况下自动装配 bean,这表明您的 Location 类不在 spring 扫描 bean 时找到的包中。 如果有 2 个 bean,那么在自动装配它时会出现错误。 默认情况下,spring 将扫描使用 @SpringBootApplication 所在的包作为基础。 然后它将查看此包和所有子包。

如果你的包结构是这样的...

myapp.main
    Application.java
myapp.config
    Location.java

然后需要在@SpringBootApplication注解中添加scanBasePackages="myapp"

还要更改您的主类并删除 @Enable.. 注释。 IE:

@SpringBootApplication(scanBasePackages="myapp")
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class, args);
    }
}

由于 yaml 没有任何效果,我不得不更改为属性文件并使用

@PropertySource({"classpath:application.properties"})

为 spring 识别属性文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM