我有一个特殊情况,hikari连接池的大小是2,不允许更改它。
我有一个付款方式(运行非常慢,需要5秒)
public BankPaymentResponse pay(BankPaymentRequest request) {
try {
Thread.sleep(5000);
return new BankPaymentResponse("200");
} catch (InterruptedException e) {
e.printStackTrace();
return null;
}
}
这个方法被称为如下;
@Transactional
public void pay(BigDecimal price) {
//pay with bank
BankPaymentRequest request = new BankPaymentRequest();
request.setPrice(price);
BankPaymentResponse response = bankService.pay(request);
//insert records
Payment payment = new Payment();
payment.setBankResponse(response.getResultCode());
payment.setPrice(price);
paymentRepository.save(payment);
logger.info("Payment saved successfully!");
}
最后将上述支付方法调用如下;
@Async
public CompletableFuture<String> call(BigDecimal price) {
paymentService.pay(price);
return CompletableFuture.completedFuture("success");
}
为了测试这个方法,我做了如下测试;
@Test
public void should_pay_with_xpaymentsystem_with_100_clients_together() {
List<CompletableFuture> futures = new ArrayList<>();
for (int i = 0; i < 100; i++) {
CompletableFuture<String> future = paymentServiceClients.call(new BigDecimal(i));
futures.add(future);
}
futures.stream().forEach(f -> CompletableFuture.allOf(f).join());
}
当测试开始时,经过一段时间后,它得到“连接不可用,请求在30002ms后超时。”
我需要在不更改连接池大小的情况下解决此超时问题。经过一些研究,我发现了一个叫做transactiontemplate的类,它通常用于这样的情况。但是,我无法将它应用到我的代码中。
暂无答案!
目前还没有任何答案,快来回答吧!