プロジェクトでは、構成情報が必要になることがよくありますが、この情報はテスト環境と本番環境で構成が異なる場合があり、実際のビジネス状況に基づいて後で変更する必要がある場合があります。これらの構成をコードにハードコーディングすることはできません。構成ファイルに記述することをお勧めします。たとえば、この情報を application.yml
ファイルに書き込むことができます。
では、コード内でこのアドレスを取得または使用するにはどうすればよいでしょうか?方法は2つあります。
@Value アノテーションが付けられた ${key} を通じて、構成ファイル (application.yml) 内のキーに対応する値を取得できます。この方法はマイクロサービスに適しています。比較的少ない状況
実際のプロジェクトでは、複雑なビジネスや複雑なロジックに遭遇する場合、1 つ以上の Configuration クラスをカプセル化することを検討する必要があります。たとえば、企業がマイクロサービス 1、マイクロサービス 2、およびマイクロサービス 3 を同時に使用する必要がある場合、これらのマイクロサービスが呼び出されます。
@Value アノテーションを使用して、対応するマイクロサービス アドレスを 1 つずつ導入するのは非常に面倒です。
おそらく実際のビジネスでは、これら 3 つのマイクロサービスよりはるかに多く、あるいは十数以上のマイクロサービスが存在します。この状況では、まず 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アノテーションで注入して利用することができます。 :
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 中国語 Web サイトの他の関連記事を参照してください。