在專案中,很多時候需要用到一些配置信息,這些信息在測試環境和生產環境下可能會有不同的配置,後面根據實際業務情況有可能還需要再做修改。我們不能將這些配置在程式碼中寫死,最好是寫到設定檔中,例如可以把這些資訊寫到 application.yml
檔案中。
那麼,怎麼在程式碼裡取得或使用這個位址?有2個方法。
我們可以透過@Value 註解的${key} 即可取得設定檔(application.yml)中和key 對應的value 值,這個方法適用於微服務比較少的情形
在實際專案中,遇到業務繁瑣,邏輯複雜的情況,需要考慮封裝一個或多個配置類別。例如,如果一個業務需要同時使用微服務1、微服務2和微服務3,那麼這些微服務將會被呼叫。
如果這樣一個個去使用 @Value 註解引入對應的微服務位址的話,太過於繁瑣。
也許實際業務中,遠遠不止這三個微服務,甚至十幾個都有可能。對於這種情況,我們可以先定義一個MicroServiceUrl
類別來專門保存微服務的URL
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "url") public class MicroServiceUrl { private String orderUrl; private String userUrl; private String shoppingUrl; public String getOrderUrl() { return orderUrl; } public void setOrderUrl(String orderUrl) { this.orderUrl = orderUrl; } public String getUserUrl() { return userUrl; } public void setUserUrl(String userUrl) { this.userUrl = userUrl; } public String getShoppingUrl() { return shoppingUrl; } public void setShoppingUrl(String shoppingUrl) { this.shoppingUrl = shoppingUrl; } }
新增依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
目前配置寫好了,此時,不需要在程式碼中一個個引入這些微服務的URL,直接透過@Resource 註解將剛剛寫好的設定類別注入進來即可使用了,以下是測試Controller:
import com.example.test1.config.MicroServiceUrl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; /** * 获取配置文件(application.yml)中和 key 对应的 value 值 * 2种方法 */ @RestController @RequestMapping("/test") public class ConfigController { private static final Logger LOGGER = LoggerFactory.getLogger(ConfigController.class); @Value("${url.orderUrl}") private String orderUrl; @Resource private MicroServiceUrl microServiceUrl; @RequestMapping("/config") public String testConfig() { LOGGER.info("获取的地址为:{}", orderUrl); LOGGER.info("微服务1地址为:{}", microServiceUrl.getOrderUrl()); LOGGER.info("微服务2地址为:{}", microServiceUrl.getUserUrl()); LOGGER.info("微服务3地址为:{}", microServiceUrl.getShoppingUrl()); return "success"; } }
以上是springboot怎麼取得application.yml裡值的詳細內容。更多資訊請關注PHP中文網其他相關文章!