springmvc阻塞http请求,并生成uuid使用 StringRedisTemplate把uuid存储起来。在别的包的类中使用使用 StringRedisTemplate获取uuid,然后释放http请求
在Spring MVC中阻塞HTTP请求可以使用异步处理方式,即在Controller方法上添加@Async
注解,并返回一个CompletableFuture
对象,这样请求就不会被阻塞。
生成UUID可以使用Java自带的UUID类,代码如下:
String uuid = UUID.randomUUID().toString();
将生成的UUID存储到Redis中,可以使用Spring提供的StringRedisTemplate
,代码如下:
@Autowired
private StringRedisTemplate redisTemplate;
public void saveUUID(String uuid) {
redisTemplate.opsForValue().set("uuid", uuid);
}
在别的包的类中获取UUID也可以使用StringRedisTemplate
,代码如下:
@Autowired
private StringRedisTemplate redisTemplate;
public String getUUID() {
return redisTemplate.opsForValue().get("uuid");
}
最后,在Controller方法中获取UUID并返回CompletableFuture
对象,代码如下:
@RequestMapping("/async")
@Async
public CompletableFuture<String> async() {
String uuid = UUID.randomUUID().toString();
saveUUID(uuid);
String result = "UUID: " + getUUID();
return CompletableFuture.completedFuture(result);
}
这样,当请求到达Controller方法时,会异步处理生成UUID和存储到Redis中的操作,然后立即返回一个CompletableFuture
对象,请求不会被阻塞,当异步操作完成后,CompletableFuture
对象会被标记为已完成,返回结果给客户端。
springmvc阻塞http请求,并生成uuid使用 StringRedisTemplate把uuid存储起来。在别的包的类中使用使用 StringRedisTemplate获取uuid,然后释放http请求
在Spring MVC中阻塞HTTP请求可以使用异步处理方式,即在Controller方法上添加@Async
注解,并返回一个CompletableFuture
对象,这样请求就不会被阻塞。
生成UUID可以使用Java自带的UUID类,代码如下:
String uuid = UUID.randomUUID().toString();
将生成的UUID存储到Redis中,可以使用Spring提供的StringRedisTemplate
,代码如下:
@Autowired
private StringRedisTemplate redisTemplate;
public void saveUUID(String uuid) {
redisTemplate.opsForValue().set("uuid", uuid);
}
在别的包的类中获取UUID也可以使用StringRedisTemplate
,代码如下:
@Autowired
private StringRedisTemplate redisTemplate;
public String getUUID() {
return redisTemplate.opsForValue().get("uuid");
}
最后,在Controller方法中获取UUID并返回CompletableFuture
对象,代码如下:
@RequestMapping("/async")
@Async
public CompletableFuture<String> async() {
String uuid = UUID.randomUUID().toString();
saveUUID(uuid);
String result = "UUID: " + getUUID();
return CompletableFuture.completedFuture(result);
}
这样,当请求到达Controller方法时,会异步处理生成UUID和存储到Redis中的操作,然后立即返回一个CompletableFuture
对象,请求不会被阻塞,当异步操作完成后,CompletableFuture
对象会被标记为已完成,返回结果给客户端。
springmvc阻塞http请求,满足条件释放请求
在Spring MVC中,可以使用Callable
或者DeferredResult
实现异步处理并释放请求。
使用Callable
的方式,可以在Controller方法中返回一个Callable
对象,并在其中执行异步操作,当异步操作完成后,Callable
对象会被触发,返回结果给客户端。代码如下:
@RequestMapping("/async")
@ResponseBody
public Callable<String> async() {
return () -> {
// 异步操作
String result = doSomething();
return result;
};
}
使用DeferredResult
的方式,也可以在Controller方法中返回一个DeferredResult
对象,并在其中执行异步操作,当异步操作完成后,调用DeferredResult
对象的setResult()
方法返回结果给客户端。代码如下:
@RequestMapping("/async")
@ResponseBody
public DeferredResult<String> async() {
DeferredResult<String> deferredResult = new DeferredResult<>();
// 异步操作
doSomething(new Callback() {
@Override
public void onSuccess(String result) {
deferredResult.setResult(result);
}
@Override
public void onError(Throwable throwable) {
deferredResult.setErrorResult(throwable);
}
});
return deferredResult;
}
其中,Callback
是一个异步操作完成后的回调接口,需要自己定义实现。在异步操作完成后,调用回调接口的onSuccess()
方法返回结果,或者调用onError()
方法返回错误信息。
做5秒的whel循环,当满足条件跳出循环
可以使用while
循环加上时间控制和条件判断来实现这个需求。
例如,以下代码实现了一个5秒的while
循环,每次循环等待1秒,当