欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot feign動(dòng)態(tài)設(shè)置數(shù)據(jù)源(https請(qǐng)求)

 更新時(shí)間:2021年08月26日 10:05:53   作者:此處省略一個(gè)字  
這篇文章主要介紹了SpringBoot如何在運(yùn)行時(shí)feign動(dòng)態(tài)添加數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1、背景

在使用springboot-feign/spingcloud-feign時(shí),需要在啟動(dòng)springboot的時(shí)候,注入的方式將feigncofing配置好,也就是說(shuō)項(xiàng)目啟動(dòng)以后只能有一個(gè)數(shù)據(jù)源,且不能修改,在網(wǎng)上找了很多資料沒(méi)有找到解決方案(網(wǎng)上應(yīng)該有,只是我沒(méi)有找到),后面只能是硬著頭皮看源碼,問(wèn)題解決,在此記錄一下,希望可以幫到有緣人

2、代碼

其實(shí)在這里用的原生的feign,并不是springboot/springcloud封裝的feign,廢話不說(shuō),上代碼

public <T> T getRemote(Class<T> apiType, String url, String apiCert, String certPassWord) {
    // apiCert 是p12文件讀了以后的數(shù)據(jù),可以把p12文件放在本地,我這里是偽代碼了
    feign.Client.Default client = FeignClient(apiCert, certPassWord);
    Decoder decoder =
        (response, type) -> {
          final String result =
              IOUtils.toString(response.body().asInputStream(), StandardCharsets.UTF_8);
          if (String.class.getName() == type.getTypeName()) {
            return result;
          }
          try {
            return JSON.parseObject(result, type);
          } catch (Exception e) {
            log.error("json parse exception");
          }
          return result;
        };
    ErrorDecoder errorDecoder =
        (methodKey, response) -> {
          try {
            final String result =
                IOUtils.toString(response.body().asInputStream(), StandardCharsets.UTF_8);
            log.info("feign client decoder response body : {}", result);
            throw new SysStatusException(response.status(), result);
          } catch (IOException e) {
            log.info("feign client decoder response error {}", e);
          }
          throw new BizStatusException(response.status(), BizCommMessage.ERROR_MSG);
        };
    T remote =
        Feign.builder()
            .decoder(decoder)
            .errorDecoder(errorDecoder)
            .client(url)
            .target(apiType, client);
    return remote;
  }
public Client getFeignClient(String apiCert, String certPassWord) {
    final SSLSocketFactory sslSocketFactory = getSSLSocketFactory(apiCert, certPassWord);
    feign.Client.Default aDefault = new Client.Default(sslSocketFactory, new NoopHostnameVerifier());
    return aDefault;
  }
public static SSLSocketFactory getSSLSocketFactory(String apiCert, String certPassWord) {
    byte[] bytes = apiCert.getBytes();
    try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes)) {
      KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE);
      keyStore.load(inputStream, certPassWord.toCharArray());
      SSLContext sslContext =
          SSLContexts.custom()
              // 忽略掉對(duì)服務(wù)器端證書(shū)的校驗(yàn),特別重要,被這行代碼坑過(guò)
              .loadTrustMaterial((TrustStrategy) (chain, authType) -> true)
              .loadKeyMaterial(keyStore, certPassWord.toCharArray())
              .build();
      return sslContext.getSocketFactory();
    } catch (IOException e) {
      log.error("=======init feign client throw IOException======={}", e);
    } catch (KeyStoreException e) {
      log.error("=======init feign client throw KeyStoreException======={}", e);
    } catch (UnrecoverableKeyException e) {
      log.error("=======init feign client throw UnrecoverableKeyException======={}", e);
    } catch (CertificateException e) {
      log.error("=======init feign client throw CertificateException======={}", e);
    } catch (NoSuchAlgorithmException e) {
      log.error("=======init feign client throw NoSuchAlgorithmException======={}", e);
    } catch (KeyManagementException e) {
      log.error("=======init feign client throw KeyManagementException======={}", e);
    }
    return null;
  }

2.2、 編寫(xiě)請(qǐng)求方法

public interface TestRemote {
  @Override
  @RequestLine("POST /apis/{test}/query")
  @Headers({"Content-Type: application/json","Accept: application/json"})
  @Body("{body}")
  String query(@Param("test") String test, @Param("body") String body);
}

2.3、發(fā)送請(qǐng)求

public static void main(String[] args) {
   TestRemote testRemote = getRemote(TestRemote.class,String url, String apiCert, String certPassWord);
    testRemote.query("test","{\"id\":1}");
  }

總結(jié):

這樣就可以根據(jù)前端傳來(lái)的參數(shù),切換不同的客戶端

本篇文章就到這里了,希望能給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java內(nèi)部類和匿名內(nèi)部類的用法說(shuō)明

    Java內(nèi)部類和匿名內(nèi)部類的用法說(shuō)明

    這篇文章主要介紹了Java內(nèi)部類和匿名內(nèi)部類的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • 解決使用this.getClass().getResource()獲取文件時(shí)遇到的坑

    解決使用this.getClass().getResource()獲取文件時(shí)遇到的坑

    這篇文章主要介紹了解決使用this.getClass().getResource()獲取文件時(shí)遇到的坑問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java的幾種文件拷貝方式示例詳解

    Java的幾種文件拷貝方式示例詳解

    在Java編程中文件操作是常見(jiàn)且重要的任務(wù)之一,其中文件拷貝是一種基本操作,這篇文章主要給大家介紹了關(guān)于Java幾種文件拷貝方式的相關(guān)資料,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下
    2024-08-08
  • 常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說(shuō)明

    常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說(shuō)明

    這篇文章主要介紹了常用校驗(yàn)注解之@NotNull,@NotBlank,@NotEmpty的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • SparkSQL讀取hive數(shù)據(jù)本地idea運(yùn)行的方法詳解

    SparkSQL讀取hive數(shù)據(jù)本地idea運(yùn)行的方法詳解

    這篇文章主要介紹了SparkSQL讀取hive數(shù)據(jù)本地idea運(yùn)行的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • maven關(guān)于pom文件中的relativePath標(biāo)簽使用

    maven關(guān)于pom文件中的relativePath標(biāo)簽使用

    在Maven項(xiàng)目中,子工程通過(guò)<relativePath>標(biāo)簽指定父工程的pom.xml位置,以確保正確繼承父工程的配置,這個(gè)標(biāo)簽可以配置為默認(rèn)值、空值或自定義值,默認(rèn)情況下,Maven會(huì)向上一級(jí)目錄尋找父pom;若配置為空值
    2024-09-09
  • Spring Native實(shí)現(xiàn)0.059s啟動(dòng)一個(gè)SpringBoot項(xiàng)目

    Spring Native實(shí)現(xiàn)0.059s啟動(dòng)一個(gè)SpringBoot項(xiàng)目

    Spring Native是Spring框架的一個(gè)子項(xiàng)目,旨在提供一種將Spring應(yīng)用程序編譯為本地可執(zhí)行文件的方法,從而提高啟動(dòng)時(shí)間和資源效率,本文主要介紹了Spring Native實(shí)現(xiàn)0.059s啟動(dòng)一個(gè)SpringBoot項(xiàng)目,感興趣的可以了解一下
    2024-02-02
  • Java詳細(xì)分析連接數(shù)據(jù)庫(kù)的流程

    Java詳細(xì)分析連接數(shù)據(jù)庫(kù)的流程

    Java數(shù)據(jù)庫(kù)連接,JDBC是Java語(yǔ)言中用來(lái)規(guī)范客戶端程序如何來(lái)訪問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序接口,提供了諸如查詢和更新數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法。JDBC也是Sun Microsystems的商標(biāo)。我們通常說(shuō)的JDBC是面向關(guān)系型數(shù)據(jù)庫(kù)的
    2022-05-05
  • UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能

    UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能

    這篇文章主要介紹了UniApp?+?SpringBoot?實(shí)現(xiàn)微信支付和退款功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Java中減少if-else的幾種方式

    Java中減少if-else的幾種方式

    if判斷語(yǔ)句是很多編程語(yǔ)言的重要組成部分,但是,若我們最終編寫(xiě)了大量嵌套的if語(yǔ)句,這將使得我們的代碼更加復(fù)雜和難以維護(hù),本文主要介紹了Java中減少if-else的幾種方式,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01

最新評(píng)論