spring boot 多线程调用restTemplate例子
时间: 2024-01-29 10:04:39 浏览: 135
下面是一个使用 Spring Boot 中的 @Async 注解来实现多线程调用 RestTemplate 的示例代码:
首先,在启动类上添加 @EnableAsync 注解,启用异步处理:
```java
@SpringBootApplication
@EnableAsync
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
```
接着,在配置类中创建 RestTemplate 的实例,并将其作为 Bean 注入到容器中:
```java
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
```
然后,在 Service 类中定义一个异步方法,使用 @Async 注解标记该方法为异步处理:
```java
@Service
public class UserService {
@Autowired
private RestTemplate restTemplate;
@Async
public CompletableFuture<User> getUserById(int id) {
String url = "https://example.com/api/user/{id}";
User user = restTemplate.getForObject(url, User.class, id);
return CompletableFuture.completedFuture(user);
}
}
```
在该方法中,我们使用 RestTemplate 发送了一个 GET 请求,并将响应转换成了 User 对象。然后,我们使用 CompletableFuture.completedFuture 方法将 User 对象包装成 CompletableFuture 对象,并返回。
最后,在 Controller 类中调用 UserService 的异步方法:
```java
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public CompletableFuture<User> getUserById(@PathVariable int id) {
return userService.getUserById(id);
}
}
```
在该方法中,我们调用了 UserService 的 getUserById 方法,并返回了一个 CompletableFuture 对象。
需要注意的是,在使用 @Async 注解时,需要注意线程池的配置和异常处理。可以在配置类中通过配置 ThreadPoolTaskExecutor 来自定义线程池的大小和其他属性。在方法中,需要使用 try-catch 块来捕获异常,并进行适当的处理。
阅读全文