在我的网络应用程序中发出一些请求后,我得到了这个异常:
java.sql.SQLTransientConnectionException: HikariPool-1 - 连接不可用,请求在 30002 毫秒后超时。
明确地说,我没有配置连接池(Hikari)。application.properties 中有我所有的属性:
spring.datasource.url=jdbc:postgresql://localhost/authHibernate
spring.datasource.username=postgres
spring.datasource.password=postgres
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.datasource.driver-class-name=org.postgresql.Driver
Method org.postgresql.jdbc.PgConnection.createClob() is not yet implemented.
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
for exceptions
logging.level.org.springframework.security=DEBUG
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.org.hibernate.type=TRACE
我的目标是在我的 Spring-Boot 应用程序中使用通常的 Hiberante(所有这些 JpaRepo<> 和 CrudRepo 不是一个简单的 Spring Data 方式)。为此,我从 EntityManager 获得了会话,并像在通常的 Hibernate 中一样使用它。据我了解,数据源负责连接池。但是这个东西是JDBC的东西。我应该如何用 Hibernate 方式而不是 JDBC 方式修复我的连接池?有一个我的 Dao 类:
@Component
public class GrowBoxDaoImpl implements GrowBoxDao {
@Autowired
private EntityManagerFactory entityManagerFactory;
@Override
public List<GrowBox> findByUser(Long userId) {
Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
String hqlQuery = "from GrowBox gb where gb.responsibleUser.id =: userId";
Query query = session.createQuery(hqlQuery);
query.setParameter("userId", userId);
List growBoxes = query.getResultList();
session.close();
return growBoxes;
}
@Override
public GrowBox findById(Long id) {
Session session = entityManagerFactory.unwrap(SessionFactory.class).openSession();
GrowBox growBox = session.get(GrowBox.class, id);
session.close();
return growBox;
}
}
}
我有几个实体和每个实体的 Dao 类和服务。还有一些使用我的服务的控制器。如果有帮助,我的应用程序有 Git Repo: https: //github.com/DennisKingsman/HibernateWithSpringBootExample
慕后森
相关分类