一,從配置文件中讀取數據有哪些方法?
通常有3種用法:
1,直接使用value注解引用得到配置項的值
2, 封裝到Component類中再調用:
可以通過value注解或ConfigurationProperties注解兩種方式訪問
3, 用Environment類從代碼中直接訪問
生產環境中推薦使用第二種,用一個統一的文件來加載,
而不必寫死到代碼中,如果配置有變更時可以統一修改也更方便
說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest
對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,演示項目的相關信息
1,地址:
https://github.com/liuhongdi/yaml
2,功能說明:演示了從yaml配置文件讀取數據的方法
3,項目結構:如圖:
三,配置文件說明
1,application.yml
#server server: port: 8081 error: include-stacktrace: always #profile spring: profiles: active: prd
2,application-dev.yml
#images app: goods: imagesUrlHost: http://127.0.0.1:81/goods imagesOrigDir: /data/file/html/goods/images imagesTmbDir: /data/file/html/goods/tmb extendNames: - jpg - gif - png - webp extendNames2: jpg,gif,png
3,application-prd.yml
#images app: goods: imagesUrlHost: http://file.lhdtest.com/goods imagesOrigDir: /data/estore/file/html/goods/images imagesTmbDir: /data/estore/file/html/goods/tmb extendNames: - jpg - gif - png - webp extendNames2: jpg,gif,png
四,java代碼
1,constant/ConfigValue.java
package com.yaml.demo.constant; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /* * 從配置文件中讀取的變量 * lhd * 2020.10.15 * */ @Component public class ConfigValue { //imagesUrlHost @Value("${app.goods.imagesUrlHost}") public String imagesUrlHost; //imagesOrigDir @Value("${app.goods.imagesOrigDir}") public String imagesOrigDir; //imagesTmbDir @Value("${app.goods.imagesTmbDir}") public String imagesTmbDir; @Value("${app.goods.extendNames2}") public String[] extendNames2; }
2,constant/ConfigProperties.java
package com.yaml.demo.constant; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.List; /* * 從配置文件中讀取的變量 * lhd * 2020.10.15 * */ @Component @ConfigurationProperties(prefix = "app.goods") public class ConfigProperties { private String imagesUrlHost; public String getImagesUrlHost() { return this.imagesUrlHost; } public void setImagesUrlHost(String imagesUrlHost) { this.imagesUrlHost = imagesUrlHost; } private List<String> extendNames; public List<String> getExtendNames() { return this.extendNames; } public void setExtendNames(List<String> extendNames) { this.extendNames = extendNames; } }
3,controller/HomeController.java
@Controller @RequestMapping("/home") public class HomeController { @Resource private ConfigValue configValue; @Resource private ConfigProperties configProperties; @Resource private Environment environment; //從配置文件讀取變量imagesUrlHost @Value("${app.goods.imagesUrlHost}") private String imagesUrlHost; //四種方式打印從配置文件中讀取到的變量值 @GetMapping("/home") @ResponseBody public String home() { String res = "第一種方法:直接用value引用:"+imagesUrlHost+":<br/>"; res += "第二種方法:封裝到Component類中,Value注解:"+configValue.imagesUrlHost+":<br/>"; res += "第三種方法:封裝到Component類中,ConfigurationProperties注解:"+configProperties.getImagesUrlHost()+":<br/>"; res += "第四種方法:environment:"+environment.getProperty("app.goods.imagesUrlHost")+":<br/>"; System.out.println("圖片類型:extendNames:"); List<String> list = configProperties.getExtendNames(); for (int i = 0; i < list.size(); i++) { String s = (String)list.get(i); System.out.println(i+":"+s); } System.out.println("圖片類型2:extendNames2:"); for (int i = 0; i < configValue.extendNames2.length; i++){ System.out.println(i+":"+configValue.extendNames2[i]); } return res; } }
五,測試效果
1,訪問:
http://127.0.0.1:8081/home/home
返回:
查看控制台:
六,查看spring boot版本
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.4.3)