feign动态设置数据源(https请求)

1、背景

在使用

springboot-feign/spingcloud-feign时,需要在启动springboot的时候,注入的方式将feigncofing配置好,也就是说项目启动以后只能有一个数据源,且不能修改,在网上找了很多资料没有找到解决方案(网上应该有,只是我没有找到),后面只能是硬着头皮看源码,问题解决 2、代码

其实在这里用的原生的feign,并不是springboot/springcloud封装的feign,废话不说,上代码

public final class HttpsUtil { public static <T> T getRemote(Class<T> apiType, String url, String apiCert, String certPassWord) { // apiCert 是p12文件读了以后的数据,可以把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 static 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() // 忽略掉对服务器端证书的校验,特别重要,被这行代码坑过 .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、发送请求public static void main(String[] args) { TestRemote testRemote = HttpsUtil.getRemote(TestRemote.class,String url, String apiCert, String certPassWord); testRemote.query(“test”,“{\”id\”:1}”); }总结:

这样就可以根据前端传来的参数,切换不同的客户端

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:feign动态设置数据源(https请求) https://www.dachanpin.com/a/cyfx/11395.html

(0)
上一篇 2023-05-12 03:14:58
一次请求的来龙去脉 – Tomcat架构解析(二)
下一篇 2023-05-12 03:15:59

相关推荐

  • 中小城市综合改革试点经验案例之十六山东省平度市农民创新创业新

      编者按:2015年3月,国家发展改革委下发《关于开展中小城市综合改革试点工作的通知》,选择北京市大兴区等61个地区开展中小城市综合改革试点。三年多来,各试点地区围绕增强中小城市资源聚集能力、人口吸纳能力和综合承载能力,立足破解中小城市改革发展面临的突出矛盾和问题,在创新产业和城市融合发展机制、优化营商环境、创新多元化投融资机制、健全要素流动机制、推进城市…

    创业分享 2023-05-13
    159
  • 江西瑞昌:训练营为大学生创业“开小灶”

    学习期间,创业指导中心除了请经验丰富的创业者“传经授道”,还邀请工商、税务、财政部门的人员和大学生面对面座谈,回答相关问题咨询,及时补充学员创业各方面需要的“营养”,提高抵抗创业风险的能力。(瑞仁轩) 近日,江西省瑞昌市启动了“大学生创业训练营”,为想创业的大学生提供个性化、特色化服务。 据介绍,训练营注重培训创业意识、提升创业能力、发掘创业潜能,引导大学生…

    创业分享 2023-05-26
    265
  • 三个关键词 看创业孵化机构如何面对疫情

      1月31日,重庆孵化器协会发布《关于适当减免入驻企业和团队租金、同舟共济共克时艰的倡议书》,鼓励重庆市孵化载体尤其是国有孵化载体应起示范带头作用,在保证自身规范健康运作的情况下,“适当减免租金,为入驻企业和创业团队减轻负担”。重庆已有12家孵化载体共计27处园区出台费用减免办法,惠及创业企业和创业团队1257家,减免金额预计将超过400万元,还有10多个…

    创业分享 2023-05-12
    225
  • 河南“互联网+”大学生创新创业大赛夏令营开营

    ■聚焦暑期师生生活  本报讯(记者 李见新 通讯员 徐春浩)近日,2019年河南省“互联网+”大学生创新创业大赛夏令营在河南理工大学开营,来自全省60余所高校、139个学生团队的600多名成员参加了仪式。活动还邀请到马云、张福海等国内知名投资人、创新创业导师、省内优秀企业家、建行投融资专家作辅导点评。 目前,河南理工大…

    创业分享 2023-05-13
    104
  • “互联网+”托起创业青年家庭农场梦

    在河间市留古寺镇,一位返乡当“农民”的创业大学生通过“互联网+”模式,搭上“京津冀一体化发展”的快车,盯紧“城市餐桌”这个大市场,做大做强有机农产品销售,把家庭农场经营得有声有色。他就是保定职业技术学院的返乡创业大学生、河间市堪泰家庭农场有限公司的负责人曹腊。 互联网+生态养殖,解决家庭农场卖蛋难题 2009年7月,以优异成绩毕业于保定职业技术学院经济管理系…

    创业分享 2023-05-29
    182

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息