【发布时间】:2019-09-30 10:58:41
【问题描述】:
我正在使用 Spring Boot 创建一个 Rest Api。我使用的是 Hikari 的默认配置,因此它的池大小为 10 个连接。 当我尝试向特定路由发布 10 个并行请求时遇到错误。错误提示 Connection is not available, request timed out after 30001ms. 此路由将数据保存到 MySQL 数据库中,通常需要几毫秒才能完成一次保存操作。 为什么会出现这个问题?它是否应该完成保存操作,然后释放数据库连接以进行下一个操作? 这个错误似乎只出现在保存函数创建新实体的保存操作中。
属性
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://192.168.1.88:3306/question?serverTimezone=UTC
spring.datasource.username=luigi
spring.datasource.password=root
存储库
public interface RandomRepository extends CrudRepository<Random, Integer> {
}
控制器
@RestController
public class RandomController {
private RandomRepository randomRepository;
public RandomController(RandomRepository randomRepository) {
this.randomRepository = randomRepository;
}
@GetMapping("/")
public String createRandom() {
return String.valueOf(Math.random());
}
@PostMapping("save")
public Random save(){
Random random = new Random();
random.setNumber(Math.random());
randomRepository.save(random);
return random;
}
}
我通过使保存方法同步找到了解决方案。这是正确的方法吗?有人遇到过同样的问题吗?
可能的解决方案
@PostMapping("save")
public synchronized Random save(){
Random random = new Random();
random.setNumber(Math.random());
randomRepository.save(random);
return random;
}
我希望保存操作会很容易完成,但它卡住了,直到它在 30 秒后崩溃
【问题讨论】:
-
您使用的是什么数据库,数据源是如何配置的?
-
请在您的问题中添加一些配置、执行持久化等的实际代码。目前信息太少。
-
我已经更新了我的问题
-
@LuigiDeCosmis 如果您觉得我的回答很有用,如果您也能提出来,我将不胜感激。
-
@riorio 我不能。它说我需要更多的声誉
标签: java rest spring-boot spring-data