應(yīng)用場景
springboot日常開發(fā)中,會遇到靜態(tài)方法需要加載配置文件信息這樣的需求,
我們一般就會使用@Value注解和@ConfigurationProperties注解來加載配置的信息;
思路理清
<p>
1.@Value(需要配合@Component),該注解的執(zhí)行在java運行初始化的最后的,所以不符合使用條件,感興趣的 同學(xué)看看java初始化等博客.
2.@ConfigurationProperties,該注解初始化的時機是,凡是引用到該類的就會觸發(fā)該注解,所以他符合我們的使用要求.
例如使用@ConfigurationProperties,貼下錯誤的代碼,
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private String host;
private String port;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public String getPort() {
return port;
}
public void setPort(String port) {
this.port = port;
}
}
但是該類文件無法在static方法中使用,所以我們又會想到使用如下辦法,全部使用靜態(tài)變量,靜態(tài)方法,貼下錯誤的代碼
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private static String host;
private static String port;
public static String getHost() {
return host;
}
public static void setHost(String host) {
RedisProperties.host = host;
}
public static String getPort() {
return port;
}
public static void setPort(String port) {
RedisProperties.port = port;
}
}
貌似沒有問題了,但是項目運行后發(fā)現(xiàn),host、port都是 null;
這是因為@ConfigurationProperties只會調(diào)用 非靜態(tài)的set方法,所以我們稍微做一下改動,set方法都換成非靜態(tài)的就可以了,貼下正確的代碼:
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
private static String host;
private static int port;
public static String getHost() {
return host;
}
public void setHost(String host) {
RedisProperties.host = host;
}
public static int getPort() {
return port;
}
public void setPort(int port) {
RedisProperties.port = port;
}
}
如此一來,就完成了我們想要的功能,感謝各位小伙伴!