![](/img/trans.png)
[英]Working with @ConfigurationProperties in a non Spring-Boot application
[英]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.