IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> openFeign 访问别人的http,并附带token,可以定时去访问接口 -> 正文阅读

[Java知识库]openFeign 访问别人的http,并附带token,可以定时去访问接口

1、导入依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.9.RELEASE</version>
        </dependency>

2、编写配置类

我这里配置类包括FeignConfig和实体的配置类

PhotovoltFeignConfig: 日志level 和 请求拦截器
PhotovoltConfig: yml配置文件的信息

@Configurable
@Slf4j
public class PhotovoltFeignConfig implements RequestInterceptor {

    public static String token;


/*    @Bean
    public RequestInterceptor requestInterceptor() {
        System.out.println("n1");
        return requestTemplate -> {
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (null != attributes) {
                HttpServletRequest request = attributes.getRequest();
                log.info("Feign request: {}", request.getRequestURI());
                // 将token信息放入header中
                System.out.println(token);
                requestTemplate.header("token",token);
            }
        };
    }*/

    @Bean
    Logger.Level photovoltFeignLevel(){
        //这里记录所有,根据实际情况选择合适的日志level
        return Logger.Level.FULL;
    }

    //请求头携带token
    @Override
    public void apply(RequestTemplate requestTemplate) {
        requestTemplate.header("token", token);
    }
}
@Data
@Component
@ConfigurationProperties(prefix = "photovolt")
public class PhotovoltConfig {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("地址")
    private String url;

    @ApiModelProperty("协议版本号")
    private String version;

    @ApiModelProperty("用户名")
    private String username;

    @ApiModelProperty("密码")
    private String password;

}

3、开启FeignClients

我这里自定义了一个开启FeignClients的注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@EnableFeignClients(basePackages = {"com.cspg.photovolt.api"})
@Import({PhotovoltFeignConfig.class,PhotovoltConfig.class})
public @interface EnablePhotovoltFeignClients {
}

然后添加这个注解到启动类里

@SpringBootApplication
@Slf4j
@MapperScan("com.cspg.photovolt.mapper")
@EnablePhotovoltFeignClients
//定时任务
@EnableScheduling
public class PhotovoltApplication {

    public static void main(String[] args) {
        SpringApplication.run(PhotovoltApplication.class, args);
    }
}

4、编写客户端调用别人提供的http接口

@FeignClient 标注该类是一个feign接口
name:因为这里并未进行服务注册,所以就随便命名一个
url:服务提供方的接口地址 (别人提供的http接口地址)

@FeignClient(name = "photovolt",url = "${photovolt.url}")
@Component
public interface PhotovoltApi {
    /**
     * 4.2.1 建立连接
     * @param jsonObject
     * @return
     */
    @PostMapping(value = "/login")
    JSONObject login(@RequestBody JSONObject jsonObject);

    /**
     * 4.3.3  获取配置
     * @param jsonObject
     * @return
     */
    @PostMapping(value = "/config_get")
    JSONObject getConfig(@RequestBody JSONObject jsonObject);

    /**
     * 4.4.1  在线数据拉取
     * @param jsonObject
     * @return
     */
    @PostMapping(value = "/online_data_get")
    JSONObject getOnlineData(@RequestBody JSONObject jsonObject);
}

5、调用服务端然后我们提供端接口

@RestController
@RequiredArgsConstructor
public class PhotovoltController {

    private final PhotovoltApi photovoltApi;

    private final PhotovoltConfig photovoltConfig;

    @Autowired
    private  PvTelemeterStatusService pvTelemeterService;


    @PostMapping(value = "/north/login")
    @PostConstruct
    @ApiOperation("4.2.1 建立连接")
    @Scheduled(cron = "0/2 * * * * ? ")
    public String login() {
        PhotovoltRequest photovoltResult = new PhotovoltRequest();
        JSONObject loginInfo = photovoltApi.login(photovoltResult.tologinJson());
        System.out.println(loginInfo);
        String error_msg = String.valueOf(loginInfo.get("error_msg"));
        String token = error_msg.substring(error_msg.indexOf(":") + 1);
        PhotovoltFeignConfig.token = token;
        return token;
    }

}

定时任务

上面已经写了,什么??????
没错就那两个注解

//定时任务
@EnableScheduling

//每2秒执行一次那个方法
@Scheduled(cron = "0/2 * * * * ? ")

最后

注意: 我这里并没有向其他文章一样自己搞个服务端的Controller,因为那个服务的接口地址是别人厂家弄好的了,我拿来用就行,只需在@FeignClient里指明url,然后在每个方法里指明下地址即可,然后在编写一个Controller去调用它获取返回结果

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 10:52:38  更:2022-12-25 10:53:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/29 5:42:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码