如何手动创建FeignClient.starter(主要能自定义Url,当做HttpClient调用)

本文档详细介绍了如何创建一个Spring Boot Starter,用于手动配置FeignClient并允许用户自定义URL。通过引入相关依赖,配置spring.factories,创建配置类和接口,最终实现根据用户配置的properties来动态设定FeignClient的目标URL。

如何手动创建FeignClient.starter(主要能自定义Url,当做HttpClient调用)

***Tips都在代码注释中***

在最近需求中,需要写一个starter,并且用feignclient调用其他程序,但是一开始脑子秀逗了,正常FeignClient不是注解表明Url吗,但是starter中properties不是对象吗,怎么搞,后来想到,别人再用的时候,你直接${}使用者properties中的定义不就行了吗。网上的博文全是抄来抄去的,并且坑很多没填,所以我摸索的正确结果,写出来。废话不多说,开搞。顺带写一波怎么自定义starter,

首先是依赖,包括starter的依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.1.2.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.netflix.feign</groupId>
    <artifactId>feign-gson</artifactId>
    <version>8.12.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.netflix.feign</groupId>
            <artifactId>feign-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
在resources目录下创建 META-INF 文件夹,创建 spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xc.sso.SSOConfiguration
创建扫描文件
/**
 * @author xvjinjiang
 * @version $Id: SSOConfiguration.java, 2020/11/10--15:24 Exp $$  
 */
@Configuration
//@EnableFeignClients  这里如果用注解创建FeignClient,就需要Enable
@ComponentScan("com.xc.sso.client")//扫描路径
@EnableConfigurationProperties(SsoProperties.class)// 主要是注入properties
public class SSOConfiguration {

}
创建properties
/**
 * @author xvjinjiang
 * @version $Id: SsoProperties.java, 2020/11/10--15:18 Exp $$  
 */
@Component
@ConfigurationProperties(prefix = "sso.config")//表明是properties配置类
//profix,properties里的前缀,使用者properties中  sso.config.doMain 来定义,启动后自动注入你这个对象
public class SsoProperties {

    /**
     * 访问域名配置
     */
    private String doMain;

    /**
     * 应用ID
     */
    private String app_id;
}
创建接口,FeignClient只支持接口创建
//@FeignClient(value = "xxxxxx",url = "xxx.xxx")
//需要注解方式创建的时候开启,url一定要有http或s前缀
public interface SsoClient {

    @PostMapping(value = "xxxx/xxx", consumes = MediaType.APPLICATION_JSON_VALUE)
    Response  postDemo(@RequestBody Request);
    //consumes,请求体为Json格式,
    //小Tips;Res和Req可以 post请求可以不同对象和形参名,但是对象里的属性必须相同,可以适当减少,但是一定要相同
}

FeignClient手动创建配置Config
/**
 * @author xvjinjiang
 * @version $Id: SsoClientDemo.java, 2020/11/10--17:09 Exp $$
 */
@Configuration//标识配置类
@Import(FeignClientsConfiguration.class)//导入FeignClientConfig
@EnableConfigurationProperties(SsoProperties.class)//为了导入properties,并使用
public class SsoClientConfig {

    @Autowired
    private SsoProperties ssoProperties;

    @Bean
    public feign.Logger.Level multipartLoggerLevel() {
        return Logger.Level.BASIC;
    }

    @Bean
    public SsoClient SsoClient(Contract contract) {
        //这里contract会自动注入默认的,但是!!!!!encoder,和decoder参数选择就用Gsoncoder
        //FeignClientsConfiguration内部有很多种coder,默认的话,不支持Json请求,或者会导致对象模糊,无法配置,这里是重点,网上的乱七八糟的,
        return Feign.builder()
                .contract(contract)
                .encoder(new GsonEncoder())
                .decoder(new GsonDecoder())
            //这里就能拿到配置类中配置的Url并且导入,重点!!一定要有http://前缀,不然会报错
                .target(SsoClient.class, ssoProperties.getDoMain());
       
    }
}

最后达成Jar包,引入后,在properties里配置即可使用,一定要配http或者https前缀

然后就可以@Autowired注入使用FeignClient接口了

sso.config.app-id=XXXX
sso.config.do-main=http://localhost:8080
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值