【发布时间】:2018-10-22 07:38:46
【问题描述】:
当一个spring boot请求启动时,它会从池中获取一个连接。我的问题是 - 这个连接是否仍然与请求线程绑定(即使它没有执行任何查询)并且只在请求完成时返回到池中?
例如,如果我正在做类似的事情:
- 请求开始
- 执行查询(20 毫秒)
- 调用外部http服务(1500ms)
- 请求完成
这个请求线程获得的连接会在20ms还是1520ms内一直被线程占用(对其他请求不可用)?
PS:我正在使用带有 HikariCP 的 Spring Boot 2.0,但我没有使用 @Transactional。
谢谢。
【问题讨论】:
-
池中的连接将用于每个事务而不是每个请求,我认为查询(20ms)执行事务的线程将使用连接执行,并在事务获得后返回池完成,
-
是否在请求开始时从池中获取连接取决于您的设置。如果您使用 JPA 并且没有更改默认值,则为 true,它将在请求开始时获取并在结束时返回到池中。如果没有,将为每个被调用的顶级
@Transactional方法获取连接。所以这实际上取决于。
标签: spring spring-boot hikaricp