Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate创建了很多连接_Java_Mysql_Hibernate_Spring Boot_Database Connection - Fatal编程技术网

Java Hibernate创建了很多连接

Java Hibernate创建了很多连接,java,mysql,hibernate,spring-boot,database-connection,Java,Mysql,Hibernate,Spring Boot,Database Connection,我使用Hibernate+SpringBoot,DB是MySQL,两天后,从150到250有很多连接。这是我的Bean,它与实体和数据库交互。我想我会处理所有异常并关闭所有连接 package com.root.lvrmmonitor.utils; import com.root.lvrmmonitor.entities.*; import org.hibernate.Session; import org.hibernate.Transaction; import org.springfra

我使用Hibernate+SpringBoot,DB是MySQL,两天后,从150到250有很多连接。这是我的Bean,它与实体和数据库交互。我想我会处理所有异常并关闭所有连接

package com.root.lvrmmonitor.utils;

import com.root.lvrmmonitor.entities.*;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DBManager {

    public List<Item> getItemsList() {

        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            return session.createQuery("from Item", Item.class).list();
        }
    }

    public DropTarget saveDropTarget(DropTarget dropTarget) {

        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Transaction tx = session.beginTransaction();
            session.save(dropTarget);
            tx.commit();
        }

        return dropTarget;
    }

    public void deleteDropTarget(DropTarget dropTarget) {
        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Transaction tx = session.beginTransaction();
            session.delete(dropTarget);
            tx.commit();
        }
    }

    public void saveSuccess(Success success) {

        try (Session session = HibernateUtil.getSessionFactory().openSession()) {
            Transaction tx = session.beginTransaction();
            session.save(success);
            tx.commit();
        }
    }
}
package com.root.lvrmmonitor.utils;
导入com.root.lvrmmonitor.entities.*;
导入org.hibernate.Session;
导入org.hibernate.Transaction;
导入org.springframework.stereotype.Service;
导入java.util.List;
@服务
公共类数据库管理器{
公共列表getItemsList(){
尝试(会话会话=HibernateUtil.getSessionFactory().openSession()){
return session.createQuery(“from Item”,Item.class).list();
}
}
公共DropTarget存储DropTarget(DropTarget DropTarget){
尝试(会话会话=HibernateUtil.getSessionFactory().openSession()){
事务tx=会话.beginTransaction();
session.save(dropTarget);
tx.commit();
}
返回目标;
}
public void deleteDropTarget(DropTarget DropTarget){
尝试(会话会话=HibernateUtil.getSessionFactory().openSession()){
事务tx=会话.beginTransaction();
删除(dropTarget);
tx.commit();
}
}
public void saveSuccess(成功){
尝试(会话会话=HibernateUtil.getSessionFactory().openSession()){
事务tx=会话.beginTransaction();
保存(成功);
tx.commit();
}
}
}

您在提供的
DBManager
类中根本没有处理异常。

以下是一些示例代码,说明如何正确处理事务:

Transaction tx=session.beginTransaction();
试一试{
session.save(dropTarget);
tx.commit();
}捕获(运行时异常e){
如果(tx.isActive())tx.rollback();
投掷e;
}
您可以创建一个简单的助手函数,如下所示:

publicstatict运行内部事务(会话、函数任务){
事务tx=会话.beginTransaction();
试一试{
T res=任务(会话);
tx.commit();
返回res;
}捕获(运行时异常e){
如果(tx.isActive())tx.rollback();
投掷e;
}
}
并在代码中使用它,如下所示:

runInTransaction(session,s->s.save(dropTarget));

嘿。我建议你问个问题。你想解决什么问题?你能给一些方法举个代码示例吗?你的问题不太清楚你在做什么,开放连接是什么意思。你是说连接中断吗?你应该在你的问题中提供更多的细节。我是关于连接处理的,我读到如果我在try()中加入openSession()方法,它会自动处理这些问题,但有时连接会因为异常和事务失败而停止。此外,还有一个连接池,即使您关闭会话,它也会保持连接打开。所以这取决于很多因素。对不起,我有点焦虑,但你们能举个好例子来分享一下要点吗