我在我的项目中遇到了一个问题,我的数据库总是有10个连接打开。我使用的是在ElasticBeanstalk上运行的spring引导应用程序(RESTAPI)。
这10个连接在应用程序启动后立即出现,不需要对数据库进行任何查询。在这一刻,我有4个类似这样的存储库类:
@Repository
@Transactional()
public class FieldJpaRepository {
private Logger logger = LoggerFactory.getLogger(this.getClass());
@PersistenceContext
EntityManager entityManager;
public List<Field> findAll(){ //JPQL
TypedQuery<Field> namedQuery = entityManager.createNamedQuery("find_all_fields", Field.class);
return namedQuery.getResultList();
}
public Field findById(int id){
return entityManager.find(Field.class,id);
}
public List<Field> findAreaFields(float minLat, float maxLat, float minLng, float maxLng){
return entityManager.createQuery("FROM Field f WHERE f.lat BETWEEN :minLat AND :maxLat AND f.lng BETWEEN :minLng AND :maxLng ", Field.class)
.setParameter("minLat", minLat)
.setParameter("maxLat", maxLat)
.setParameter("minLng", minLng)
.setParameter("maxLng", maxLng)
.getResultList();
}
public Field updateOrInsertField(Field field){
return entityManager.merge(field);
}
public void deleteField(int id){
Field findField = findById(id);
entityManager.remove(entityManager.contains(findField) ? findField : entityManager.merge(findField));
}
}
我的application.properties文件如下:
spring.jpa.show-sql=true
spring.datasource.url=********
spring.datasource.username=******
spring.datasource.password=******
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect
spring.jpa.hibernate.ddl-auto=create
我会做错什么吗?是否缺少任何配置参数?
先谢谢你。
1条答案
按热度按时间eimct9ow1#
套
spring.datasource.hikari.maximumPoolSize
到一个合适的值。说明:
hikari是自2.0以来spring引导的默认jdbc连接池
它会提前打开到数据库的连接,并将它们保留在空闲池中
默认值为10
spring.datasource.hikari.*
是hikari的特定设置hikari选项如此处所述