【发布时间】:2019-02-19 14:04:26
【问题描述】:
我在 Spring-boot 项目中使用 Spring JPA。我有一个简单的命名查询。 proc 每 10 秒调用一次。如果没有在我的存储库接口上注释 @Transactional,连接池中的连接就会耗尽。我得到“超时:池为空。无法在 30 秒内获取连接,无可用 [大小:100;忙:100;空闲:0;最后等待:30000]。”
但是,在我添加了@Transactional 注释之后,它就可以正常工作了。注释和释放回池的连接之间有什么关系?我以为 Spring JPA 会在方法调用完成后自动释放连接。
@Repository
@Transactional
public interface StoredProcedureRepository extends CrudRepository<StoredProcedureDO, Long> {
@Procedure(name = "invokeStoredProc")
void invokeStoredProc(@Param("id") Long id, @Param("date") java.sql.Date date);
}
@Entity
@NamedStoredProcedureQuery(name ="invokeStoredProc",
procedureName = "schema.storedProc",
parameters = {
@StoredProcedureParameter(mode = ParameterMode.IN, name = "id", type = Long.class),
@StoredProcedureParameter(mode = ParameterMode.IN, name = "date", type = java.sql.Date.class)})
public class StoredProcedureDO implements Serializable {
【问题讨论】:
-
您使用的是哪个连接池?
-
我没有在属性文件中指定任何内容。我假设 Spring 使用的是默认值。从调用堆栈中,我可以看到它正在使用 Tomcat 连接池。
-
如何调用 invokeStoresProc ?通过计划任务?
-
连接释放方式呢?
-
连接释放方式呢?
标签: java spring spring-boot jpa spring-data-jpa