您好,登錄后才能下訂單哦!
本篇內容主要講解“Spring boot讀取外部化怎么配置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring boot讀取外部化怎么配置”吧!
我們一般會將相關配置信息寫在Properties / YAML文件中,然后在通過某種方式來進行數據的獲取。
比如下圖我就定義了三個參數:
首先我們可以通過Environment來進行外部配置信息的加載(Spring Boot中的所有外部化配置都會加載到Environment中)。
首先我們直接通過Autowired
注入Environment:
@Autowired Environment environment;
然后直接獲取數據信息即可。
@RestController public class ConfigController { @Autowired Environment environment; @GetMapping("/env") public String env() { return environment.getProperty("name") + "\n"; } }
第二種方式就是我們比較常用的注解方式,直接通過注解寫入相應的KEY,獲取對應的value。如果沒有KEY值則啟動的時候會報錯。
@Value("${name}") private String name;
有的時候可能我們的外部化配置不是寫在application.properties
中,而是寫在一些自定義Properties中,那這個時候我們如何通過value注解獲取其中的數據呢?
在上面說environment
的時候,我們知道Spring Boot中的所有外部化配置都會加載到Environment中,我們可以在Spring boot構建environment之前對其進行相關的修改。
我們可以通過實現EnvironmentPostProcessor
接口并重寫postProcessEnvironment
方法來對environment進行修改。
整體流程如下:
實現接口,重寫方法
定義Properties,以及我們需要獲取數據文件的名字。
解析文件將數據添加至environment中
public class CustomEnvironmentPostProcessor implements EnvironmentPostProcessor { private final Properties properties = new Properties(); private String propertiesFile = "custom.properties"; @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { Resource resource = new ClassPathResource(propertiesFile); environment.getPropertySources().addLast(loadProperties(resource)); } private PropertySource<?> loadProperties(Resource resource) { if (!resource.exists()) { throw new RuntimeException("file not exist"); } try { //custom.properties properties.load(resource.getInputStream()); return new PropertiesPropertySource(resource.getFilename(), properties); } catch (IOException e) { throw new RuntimeException(e); } } }
這個時候代碼寫好之后,我們可以通過value注解獲取數據了嗎?我們運行試試。(記得將application.properties中的數據清空)
這個時候我們會發現運行失敗,沒有找到對應key。這是為什么呢?這是由于以上都是我們對Spring boot功能的拓展,做這種功能拓展的時候,我們需要使用到我們的SPI機制,按照拓展規則去定義我們的拓展實現。這樣才能使我們的拓展點生效。
這里和JAVA做SPI機制的實現不一樣,之前做SPI都是創建的全類名文件,然后寫對應的實現類,這邊文件名需要定義為spring.factories。
org.springframework.boot.env.EnvironmentPostProcessor=\ com.example.springbootzookeeper.CustomEnvironmentPostProcessor
這個時候我們重新運行項目,可以發現成功運行。
Spring boot 中我們是有很多種外部化配置的方式,比如環境變量、系統變量、命令行參數等。我們在下方演示一種類型的外部化配置:我們可以通過這種-D
形式進行外部化配置。value注解后面的key對應-D
后面的key。
@Value("${test}") private String command;
到此,相信大家對“Spring boot讀取外部化怎么配置”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。