Я использую Spring JPA в проекте Spring-boot.У меня есть простой именованный запрос.Процесс вызывается каждые 10 секунд.Без аннотации @Transactional через мой интерфейс репозитория соединение в пуле соединений заканчивается.Я получаю сообщение «Тайм-аут: Пул пуст. Невозможно получить соединение в течение 30 секунд, недоступно [размер: 100; занято: 100; бездействует: 0; последнее ожидание: 30000]».
Однако после добавления @Транзакционная аннотация, она работает просто отлично.Какова связь между аннотацией и соединениями, возвращаемыми обратно в пул?Я думал, что 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 {