创建一个GitHub用户信息查找服务,这个服务是通过GitHub的API获取数据的。

接口是http的,如下:

这里创建一个model去接收对象:

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class User {private String name;private String blog;
}

@JsonIngnore告诉spring忽略其他json属性。

下面是创建GitHub检索服务,代码如下:

@Service
public class GitHubLookupService {private static final Logger logger = LoggerFactory.getLogger(GitHubLookupService.class);private final RestTemplate restTemplate;public GitHubLookupService(RestTemplateBuilder restTemplateBuilder){this.restTemplate = restTemplateBuilder.build();}public CompletableFuture<User> findUser(String user) throws InterruptedException {logger.info("Looking up " + user);String url = String.format("https://api.github.com/users/%s", user);User results = restTemplate.getForObject(url, User.class);Thread.sleep(1000L);return CompletableFuture.completedFuture(results);}
}

GItHubLookupService使用RestTemplate调用api.github.com/users,获取User对象。

AppRunner.java

@Component
public class AppRunner implements CommandLineRunner {private static final Logger logger = LoggerFactory.getLogger(AppRunner.class);private final GitHubLookupService gitHubLookupService;public AppRunner(GitHubLookupService gitHubLookupService){this.gitHubLookupService = gitHubLookupService;}@Overridepublic void run(String... args) throws Exception {long start = System.currentTimeMillis();CompletableFuture<User> pivotalSoftware = gitHubLookupService.findUser("PivotalSoftware");CompletableFuture<User> cloudFoundry = gitHubLookupService.findUser("CloudFoundry");CompletableFuture<User> user = gitHubLookupService.findUser("Spring-Projects");CompletableFuture.allOf(pivotalSoftware, cloudFoundry, user).join();logger.info("Elapsed time: " + (System.currentTimeMillis() -  start));logger.info("-->" + pivotalSoftware.get());logger.info("-->" + cloudFoundry.get());logger.info("-->" + user.get());logger.info("---------- over ----------");}
}

DemoApplication.java

@SpringBootApplication
@EnableAsync
public class DemoApplication {@Beanpublic Executor taskExecutor(){ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(2);executor.setMaxPoolSize(2);executor.setQueueCapacity(500);executor.setThreadNamePrefix("GithubLookup-");executor.initialize();return executor;}public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

Spring Boot文档阅读笔记-Creating Asynchronous Methods解析相关推荐

  1. Spring Boot文档阅读笔记-exception handling–@ExceptionHandler解析与实例

    程序结构如下: 源码如下: CustomExceptionHandler.java package com.example.demo.controller;import com.example.dem ...

  2. Spring Boot文档阅读笔记-Validating Form Input解析

    这篇文章的主要功能是Web应用程序中验证表单输入是否合法的文章. PersonForm对象 首先创建一个PersonForm对象: 这个对象会验证PersonForm的用户名,代码如下: packag ...

  3. Spring Boot文档阅读笔记-how-to-implement-2-way-ssl-using-spring-boot

    two-way-ssl需要12次握手(除去TCP的三次握手),如下图: 双向认证过程: 1.客户端发送ClientHello消息,告诉服务端要使用SSL. 2.客户端发送ServerHello的响应, ...

  4. Spring Boot文档阅读笔记-EhCache的使用

    这里要先注意2个概念: buffer和cache,很多人会讲这两个概念混用.但其实这是两个概念! buffer:一般是指存储临时数据的实体.只能读写一次,对于程序员来说buffer是可见的,比如TCB ...

  5. Spring Boot文档阅读笔记-Spring Boot @Bean解析

    利用SpringBoot的@Bean创建一个简单的Bean. Spring的@Bean注解是放在方法上的,带上这个注解的方法会被Spring容器管理.并且这个方法要返回一个值(对象),这个值和对象会被 ...

  6. Spring Boot文档阅读笔记-对Securing a Web Application解析

    首先创建一个非安全的Web应用 这个应用包含两个页面,一个是home页面,一个是"Hello,World"页面.home页面使用Thymeleaf,相关代码如下: <!DOC ...

  7. Spring Boot文档阅读笔记-构建Restful风格的WebService客户端

    对应的maven如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  8. Spring Boot文档阅读笔记-构建Restful风格的WebService

    Maven代码如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. Spring Boot文档阅读笔记-对Messaging with RabbitMQ解析

    此篇教程以Rabbitmq作为消息队列服务端,使用Spring Boot产生和发布消息. 使用Spring AMQP的RabbitTemplate发布消息,使用MessageListenerAdapt ...

最新文章

  1. 回归、线性回归和逻辑回归【逻辑回归部分待完成】
  2. KDDockWidgets源码编译及安装
  3. LIN总线接口静电保护专用器件:DW24DLC-B-S和DW24D-B-S
  4. SAP Cloud for Customer Sales Order Pricing Date的配置
  5. 3dmax模型转换为*.FLT格式的建模要点
  6. 2022年考研计算机组成原理_2 数据表示和运算
  7. easyui下拉选项多怎么解决_30岁以后皮肤松弛皱纹越来越多怎么办?这组瑜伽帮你解决...
  8. win7 梦幻桌面下载地址
  9. 昆腾公司稍感安慰:向外扩展存储业务营收有所提升
  10. IntelliJ IDEA - 自定义 TODO
  11. 625线,525线什么意思?
  12. 使用Vivado软件进行硬件调试
  13. mysql 主辅_Mysql的实时同步 - 主辅同步
  14. LFS(linux for stratch)关于急救盘的制作问题
  15. javascript--经典实例锦集
  16. mysql查询员工最高最低工资三种方式
  17. 通俗讲解MOSFET
  18. 徐无忌MySQL笔记:索引的使用规则
  19. 计算机专业浅谈:都说这行业35岁失业,是真的嘛?
  20. 使用yum高速部署Oracle安装环境(11g)

热门文章

  1. 安全模式下修复电脑故障
  2. 编程萌新注意:别再这样问问题了!学会这样快速定位错误内容
  3. 飞秋官方下载 某些大型企业
  4. 深圳南山区法院受理11人集体诉腾讯案
  5. 如何从初级程序员变成高级程序员?赶紧看一看
  6. 今天我不想发文了,对不起各位!
  7. 跟我学调试-必备神器:Postman
  8. 最先进的响应式前端框架:Foundation 5!
  9. 实用c语言程序设计教材,实用C语言程序设计
  10. Pytorch中参数和模型的保存与读取