![](/img/trans.png)
[英]Can't bind properties with @Bean and @ConfigurationProperties
[英]ConfigurationProperties does not bind properties
我想通過使用@ConfigurationProperties注釋將我的application.properties自動綁定到一個類中。 首先,我嘗試使用@Value注釋,並能夠將屬性值注入類變量。 但是,@ ConfigurationProperties沒有將屬性注入值。
我的application.properties:
spring.jpa.show-sql=false
my.url=my_url
my.name=muatik
application.java
package com.muatik;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
final ApplicationContext ctx = SpringApplication.run(Application.class, args);
final ConfigBinder confs = ctx.getBean(ConfigBinder.class);
System.out.println(confs.getUrl());
System.out.println(confs.getName());
}
}
ConfigBinder.java
package com.muatik;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="my")
public class ConfigBinder {
@Value("${my.name}")
private String name;
private String url; // expected to be filled automatically
public String getUrl() {
return this.url;
}
public String getName() {
return this.name;
}
}
輸出:
...
2017-01-18 15:19:29.720 INFO 4153 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2017-01-18 15:19:29.724 INFO 4153 --- [ main] com.muatik.Application : Started Application in 4.212 seconds (JVM running for 4.937)
null
muatik
這個實現有什么問題?
編輯和解決方案 :可能的重復: Spring Boot @ConfigurationProperties不從環境中檢索屬性
我發現我錯過了ConfigBinder中的setter。 添加后,它現在可以使用了。
您需要從屬性類中刪除@Component並添加setter,因為@ConfigurationProperties
使用標准bean屬性綁定:
@ConfigurationProperties(prefix="my")
public class ConfigBinder {
private String name;
private String url; // expected to be filled automatically
public String getUrl() {
return this.url;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public void setUrl(String url) {
this.url = url;
}
}
並將@EnableConfigurationProperties添加到您的主類:
@SpringBootApplication
@EnableConfigurationProperties(ConfigBinder.class)
public class Application {
public static void main(String[] args) {
final ApplicationContext ctx = SpringApplication.run(Application.class, args);
final ConfigBinder confs = ctx.getBean(ConfigBinder.class);
System.out.println(confs.getUrl());
System.out.println(confs.getName());
}
}
主要問題是你沒有設置者。 當你把setter放到ConfigBuilder工作正常。 ConfigBuilder必須是這樣的
@Component
@ConfigurationProperties(prefix="my")
public class ConfigBinder {
private String name;
private String url;
// Getters and Setters !!!
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.