最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1、背景

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

2、代碼

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

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()
              // 忽略掉對服務(wù)器端證書的校驗,特別重要,被這行代碼坑過
              .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、 編寫請求方法

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ā)送請求

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

總結(jié):

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

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

相關(guān)文章

  • Java8中Optional的使用方法詳解

    Java8中Optional的使用方法詳解

    這篇文章主要介紹了Java8中Optional的使用方法詳解,傳統(tǒng)的寫代碼方式經(jīng)常會遇到NullPointerException,這就需要我們在代碼中經(jīng)常判空,而判空的寫法又會顯得很累贅,這里就可以用到Optional來簡化代碼,需要的朋友可以參考下
    2024-01-01
  • Java并發(fā)多線程編程之CountDownLatch的用法

    Java并發(fā)多線程編程之CountDownLatch的用法

    這篇文章主要介紹了Java并發(fā)多線程編程之CountDownLatch的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 基于@Autowierd(自動裝配)的使用說明

    基于@Autowierd(自動裝配)的使用說明

    這篇文章主要介紹了@Autowierd(自動裝配)的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java實現(xiàn)讀取resources目錄下的文件路徑的九種方式

    Java實現(xiàn)讀取resources目錄下的文件路徑的九種方式

    本文主要介紹了Java實現(xiàn)讀取resources目錄下的文件路徑的九種方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Spring boot整合log4j2過程解析

    Spring boot整合log4j2過程解析

    這篇文章主要介紹了Spring boot整合log4j2過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • MybatisPlus?BaseMapper?實現(xiàn)對數(shù)據(jù)庫增刪改查源碼

    MybatisPlus?BaseMapper?實現(xiàn)對數(shù)據(jù)庫增刪改查源碼

    MybatisPlus?是一款在?Mybatis?基礎(chǔ)上進行的增強?orm?框架,可以實現(xiàn)不寫?sql?就完成數(shù)據(jù)庫相關(guān)的操作,這篇文章主要介紹了MybatisPlus?BaseMapper?實現(xiàn)對數(shù)據(jù)庫增刪改查源碼解析,需要的朋友可以參考下
    2023-01-01
  • SpringBoot實現(xiàn)Thymeleaf驗證碼生成

    SpringBoot實現(xiàn)Thymeleaf驗證碼生成

    本文使用SpringBoot實現(xiàn)Thymeleaf驗證碼生成,使用后臺返回驗證碼圖片,驗證碼存到session中后端實現(xiàn)校驗,前端只展示驗證碼圖片。感興趣的可以了解下
    2021-05-05
  • springmvc接口接收參數(shù)與請求參數(shù)格式的整理

    springmvc接口接收參數(shù)與請求參數(shù)格式的整理

    這篇文章主要介紹了springmvc接口接收參數(shù)與請求參數(shù)格式的整理,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring BeanPostProcessor源碼示例解析

    Spring BeanPostProcessor源碼示例解析

    這篇文章主要為大家介紹了Spring BeanPostProcessor源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 分析SpringBoot的啟動原理

    分析SpringBoot的啟動原理

    這篇文章主要分析了SpringBoot的啟動原理,幫助大家更好的理解和使用spring boot框架,感興趣的朋友可以了解下
    2020-09-09

最新評論

房产| 武隆县| 沙洋县| 抚松县| 通化县| 扶绥县| 平利县| 桦甸市| 孟州市| 蒙山县| 赤水市| 瑞丽市| 龙南县| 南充市| 渝北区| 陇西县| 色达县| 万安县| 固镇县| 云霄县| 珲春市| 方正县| 惠州市| 全南县| 仲巴县| 望城县| 同江市| 黄龙县| 红安县| 札达县| 阜城县| 日土县| 东城区| 丹巴县| 鄯善县| 汝城县| 汽车| 祁东县| 高碑店市| 团风县| 高平市|