spring@value註入配置文件值失敗的原因分析
spring@value註入配置文件值失敗的原因
今天我寫瞭一個system.propertities配置文件定義瞭一個變量host=localhost。
然後在spring 配置文件中加入瞭加載配置
在service中這樣寫
@Value("${host}") private static String host;
但是獲取不到,各種查資料,最後發現是static關鍵字的原因
spring@Value依賴註入是依賴set方法
set方法是普通的對象方法,static變量是類的屬性,沒有set方法;
spring配置文件@Value註解註入失敗或為null
在spring使用@Value從application.properties將值註入到變量中時,遇到
瞭註入失敗和註入值為null兩種問題。
解決方案
1、查看maven依賴,
(如果生效,可不進行後續步驟)
2、加入註釋@PropertySource(value = “classpath:/application.properties”)配置文件路徑。
(如果生效,可不進行後續步驟)
3、將被註入變量作為構造方法參數進行輸入。
代碼示例
maven依賴
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>5.1.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.1.3.RELEASE</version> </dependency>
config類
@Configuration //聲明properties文件位置 @PropertySource(value = "classpath:/application.properties") public class DemoConfig { private String name; //將@Value作為構造函數參數註入 public DemoConfig(@Value("${book.name}") String name){ this.name = name; } public void output(){ System.out.println(name); } }
main
@SpringBootApplication public class DemoApplication { public static void main(String[] args) { // SpringApplication.run(DemoApplication.class, args); AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DemoConfig.class); DemoConfig service = context.getBean(DemoConfig.class); service.output(); } }
問題解析
1、spring版本問題,根據本人實驗,4.x以下版本會出現一些註入問題。
2、沒有寫@PropertySource(value = “classpath:/application.properties”)註解,或路徑不對。
3、.properties文件沒有放在resources文件夾中。
問題拓展
1、除瞭springboot自帶的application.properties文件外,可以自己創建test.properties,導入其他自創屬性,並管理屬性。
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- springboot配置mybatis和事務管理方式
- SpringBoot配置加載,各配置文件優先級對比方式
- Spring使用@Value註解與@PropertySource註解加載配置文件操作
- Spring與Dubbo搭建一個簡單的分佈式詳情
- springboot如何讀取模板文件