您好,登錄后才能下訂單哦!
這篇“Spring Boot怎么正確讀取配置文件屬性”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Spring Boot怎么正確讀取配置文件屬性”文章吧。
@Value用來讀取application.yml配置文件中屬性的值。
application.yml文件中屬性:
//定義屬性 fileName : test isFile : false filePath : c://test
@value讀取application.yml屬性值:
@Configuration public class FileConfig { @Value("${fileName}") private final String fileName; @Value("${isFile}") private boolean isFile; @Value("${filePath}") private static String filePath; }
測試:
@Autowired private FileConfig fileConfig; @GetMapping("getFileConfig") public void getFileConfig() { logger.info("fileConfig:{}",fileConfig); }
運行結果:
fileConfig:FileConfig [fileName=, isFile=false, filePath=null]
特別注意:
@Value不能將屬性值讀取靜態變量,否則讀取的值為空。
@Value不能將屬性值讀取常量,否則讀取的值為空。
@Value不能讀取boolean類型的值,經過測試Spring Boot2.1的版本是無效的,2.2以上版本支持。
所以個人建議非必要情況,盡量少用@Value注解讀取屬性值。
讀取配置文件值并且轉換成類對象,便于獲取值和修改屬性值。
application.yml文件中屬性:
http: pool: # 連接超時 connectTimeout: 5000 #獲取連接池中連接超時 connectionRequestTimeout: 1000 #每個路由連接數量 defaultMaxPerRoute: 50 # /連接池中最大連接數 maxTotal: 50 # 服務器返回數據(response)的時間 socketTimeout: 5000 #定義不活動的時間(以毫秒為單位),連接回收 validateAfterInactivity: 30000
@ConfigurationProperties讀取application.yml中以http.pool開頭的屬性值:
//以http.pool開頭 @Component @ConfigurationProperties(prefix = "http.pool") public class HttpClientConfig implements Serializable { private static final long serialVersionUID = -4608251658338406043L; /** * 最大連接數 */ private Integer maxTotal; /** * 路由是對最大連接數的細分 * 每個路由基礎的連接數 */ private Integer defaultMaxPerRoute; /** * 連接超時時間 */ private Integer connectTimeout; /** * 從連接池中獲取連接的超時時間 */ private Integer connectionRequestTimeout; /** * 服務器返回數據(response)的時間 */ private Integer socketTimeout;
測試:
@GetMapping("getHttpClientConfig") public void getHttpClientConfig() { String json=FastJsonUtil.toJSONString(httpClientConfig); logger.info("fileConfig:{}",json); }
屬性嵌套:
@ConfigurationProperties 可以嵌套List、map、class
config: url:http://localhsot:8080 gaode-map: host: https://restapi.amap.com/v3 key: 1234 @ConfigurationProperties(prefix="config") public class Config { //高德地圖信息 private GaodeMap gaodeMap; }
特別注意:
默認情況不會將實體注入到spring的容器中,需要結合@EnableConfigurationProperties
或者@Component
一起使用,否則注入對象為空。
將@ConfigurationProperties
讀取對象注入到spring容器中。例如上述示例也可以采用@EnableConfigurationProperties
來注入
@EnableConfigurationProperties(HttpClientConfig.class) public class FileController { private Logger logger = LoggerFactory.getLogger(FileController.class); @Autowired private FileConfig fileConfig; @GetMapping("getHttpClientConfig") public void getHttpClientConfig() { String json=FastJsonUtil.toJSONString(httpClientConfig); logger.info("fileConfig:{}",json); } }
用來掃描@ConfigurationProperties
實體類并將類注入到Spring容器,上述示例可以如下使用
@ConfigurationPropertiesScan("com.xx.fw.config") public class FwCoreApplication { public static void main(String[] args) { SpringApplication.run(FwCoreApplication.class, args); } }
@PropertySource 主要用于讀取指定的配置文件,需要結合@ConfigurationProperties 注解一起使用實現配置文件和Java Bean的注入操作。
屬性文件user.properteis:
user.id=222 user.name=劍圣 user.age=28
實體類定義:
@Component @ConfigurationProperties(prefix = "user") @PropertySource(value = {"classpath:user.properties"}) public class UserConfig { private String id; private String name; private int age; }
測試:
@GetMapping("getUserConfig") public void getUserConfig() { String json=FastJsonUtil.toJSONString(userConfig); logger.info("userConfig:{}",json); }
輸出結果:
c.s.fw.controller.FileController - userConfig:{"age":28,"id":"123","name":"admin"}
以上就是關于“Spring Boot怎么正確讀取配置文件屬性”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。