这是在收到以db为单位的帖子列表后发送带有每个帖子链接数据的POST请求的代码。
在使用每个链接请求帖子后,从回复中提取playerCount并将其更新到每个帖子。
我在这段代码中使用Resttemplate,但有一个问题需要花费太长时间。
所以我想把这个代码改为一次发送一个请求,并在所有请求完成后更新每个帖子。
我怎样才能把这个代码转换成我想要的?
我将使用此代码作为计划任务。
@Test
@Transactional
@Rollback(false)
public void postToGraphql2() throws JsonProcessingException, JSONException {
String URL = "https://gt-space-data.herokuapp.com/graphql";
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.add("content-type", "application/json");
long startTime = System.currentTimeMillis();
List<Posts> list = postsRepository.findPostsByCategoryStringContaining("GATHERTOWN");
String query = "query gameData($apikey:String!,$spaceid:String!,$spacename:String!){gameData(spaceData:{apiKey: $apikey, spaceIdNum: $spaceid, spaceName: $spacename}){playerCount,}}";
String opertationName = "gameData";
list.forEach(posts -> {
String link = posts.getLink();
if(link.contains("gather.town")){
String spaceid = link.substring(link.indexOf("app/")+4,link.lastIndexOf("/"));
String spacename = link.substring(link.lastIndexOf("/")+1, link.length());
String variables = "{\"apikey\": \"QUNCVEQGILsqe5\",\"spaceid\": \""+spaceid+"\",\"spacename\" : \""+spacename+"\"}";
try {
ResponseEntity<PlayerCountDto> response =
restTemplate.postForEntity(URL, new HttpEntity<>(createJsonQueries(query,opertationName,variables), headers), PlayerCountDto.class);
int playerCount = Objects.requireNonNull(response.getBody()).getData().getGameData().playerCount;
posts.setPlayerCount(playerCount);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
});
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println(elapsedTime);
}
一种方法是用“Webclient”替换Resttemplate。Webclient是Spring 5.0中引入的Spring Webflux的一部分。Webclient是异步的、非阻塞的。
您可以从以下文档开始
https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/html/boot-features-webclient.html
如果是的话,有谁能向我解释如何做到这一点?
我对在PHP中一次提交多个请求持怀疑态度。我有一个php函数,比如insertOrder()来将详细信息插入数据库表并向用户发送通知。详细信息将从另一个来源自动发布到此功能。这些是insertOrder()中的步骤 启动Mysql事务 从OrderID=123的数据库表中选择订单计数(来自post数据) 如果COUNT=0,则插入数据库表并发送通知 如果不是0,则更新顺序 提交 问题在于,有时系统
发生这种情况时,异步任务将暂停(代码停止执行)。我假设我使用了太多的内存,所以我制作了这些静态类变量,所以它们只分配一次: 所有其他的东西在使用后都被设置为空。我也尝试过在清单中设置大堆要求“android:largeheap=”true“”,但还是出现了同样的问题。 我想不出哪里做错了。我知道对500个http请求要求非常苛刻,但必须有解决方案。有什么想法吗?
是否可以在webclient上将多个请求链接在一起?例如,我希望在进行交易时能够更新买方和卖方的余额。现在它只更新买家余额: 是否有一种方法可以将两个put方法调用在一起,以便更新两个余额? 更新:此方法适用于将单声道值作为uri变量调用。
是否可以在同一个对话框中同时请求多个权限,比如读联系人、读短信和写外部存储? 如果是,如何做到?请提供一个例子。 我已经在网上搜索了几个小时,但找不到方法。请帮忙!
我在项目中使用drools 6.3.0。我有大约3000条规则,分为两类。比如,类别1有1500条规则,类别2有1500条规则。有2万份订单具有不同的数据。每个订单都有一组不同的属性。现在,为每个请求创建kiesession需要时间,而且速度非常慢。因此,计划使用相同的kiesession执行所有订单,订单将使用多线程处理。 以下是我目前的做法。 这就是我创建kiesession的方式,我想将此k