在spring boot中防止db连接超时而不更改池大小

30byixjq  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(161)

我有一个特殊情况,hikari连接池的大小是2,不允许更改它。
我有一个付款方式(运行非常慢,需要5秒)

  1. public BankPaymentResponse pay(BankPaymentRequest request) {
  2. try {
  3. Thread.sleep(5000);
  4. return new BankPaymentResponse("200");
  5. } catch (InterruptedException e) {
  6. e.printStackTrace();
  7. return null;
  8. }
  9. }

这个方法被称为如下;

  1. @Transactional
  2. public void pay(BigDecimal price) {
  3. //pay with bank
  4. BankPaymentRequest request = new BankPaymentRequest();
  5. request.setPrice(price);
  6. BankPaymentResponse response = bankService.pay(request);
  7. //insert records
  8. Payment payment = new Payment();
  9. payment.setBankResponse(response.getResultCode());
  10. payment.setPrice(price);
  11. paymentRepository.save(payment);
  12. logger.info("Payment saved successfully!");
  13. }

最后将上述支付方法调用如下;

  1. @Async
  2. public CompletableFuture<String> call(BigDecimal price) {
  3. paymentService.pay(price);
  4. return CompletableFuture.completedFuture("success");
  5. }

为了测试这个方法,我做了如下测试;

  1. @Test
  2. public void should_pay_with_xpaymentsystem_with_100_clients_together() {
  3. List<CompletableFuture> futures = new ArrayList<>();
  4. for (int i = 0; i < 100; i++) {
  5. CompletableFuture<String> future = paymentServiceClients.call(new BigDecimal(i));
  6. futures.add(future);
  7. }
  8. futures.stream().forEach(f -> CompletableFuture.allOf(f).join());
  9. }

当测试开始时,经过一段时间后,它得到“连接不可用,请求在30002ms后超时。”
我需要在不更改连接池大小的情况下解决此超时问题。经过一些研究,我发现了一个叫做transactiontemplate的类,它通常用于这样的情况。但是,我无法将它应用到我的代码中。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题