几个月后,我已将spring mvc appliction部署在服务器(生产中)中,我的应用程序崩溃了tomcat服务器,我问应用程序托管公司为什么会这样。

他们说不。服务器中的war文件数量更多,并且您与db的连接更需要在交易后关闭它们。

但是我的意思是我正在使用spring mvc框架,它负责连接的打开和关闭。但是托管团队告诉我,组织您的mysql

是我的方法正确还是不正确,请查看我的代码

控制器:

 @GetMapping("/getStudentDetails")
 public ResponseEntity<Map<String, Object>> getStudentDetails()
{
    List<Students> stus= examService.getStudentDetails();
}


服务实施

@Override
@Transactional  //here starts only one transaction
public List<Students> getStudentDetails( ) {

    return examDao.getStudentDetails();
}


DAO实施

 @Override
        public List<Students> getStudentDetails() {
    // here i will have no of connections to get student details as follows

currentSession = sessionFactory.getCurrentSession();
//get student details
Query query=currentSession .createQuery(" from  StudentDetais");
query.list();

//get student parent details
Query query=currentSession .createQuery(" from  StudentParentDetais");
query.list();
    }

//get student personal details
Query query=currentSession .createQuery(" from  StudentPersonalDetais");
query.list();
    }
...........
............. so on...


在上面的代码中,通过一个事务,我没有连接到db,就像每个学生一样,我将循环相同的查询而无需返回到控制器。

这种方法会破坏我的应用程序吗?

我应该为每位学生提供@Transactional,以便永远打开和关闭学生联系。

从控制器发送一个学生ID进行交易并关闭,从控制器发送另一个学生ID进行交易....依此类推。

请解决我的一项交易中没有联系的问题吗?
谢谢。

最佳答案

JPA查询可能会返回代理列表。 JPA可能会继续使用连接,直到在代理上调用getter为止。解决方案可能是使用DTO,并在每次查询JPA层返回的数据后感觉到它们。

10-07 19:42
查看更多