几个月后,我已经将spring mvc appliction
部署在服务器中(正在生产中),我的应用程序崩溃了tomcat服务器,我问应用程序托管公司为什么会这样。
他们说不。服务器中的战争文件数量更多,并且您与db的连接也需要在交易后关闭它们。
但是我的意思是我正在使用spring mvc framework,它负责连接的打开和关闭。但是托管团队告诉我,组织您的 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进行交易。...依此类推。
请解决我的一个交易中没有连接的问题吗? 谢谢。
答案 0 :(得分:0)
JPA查询可能返回代理列表。 JPA可能会继续使用连接,直到在代理上调用getter为止。解决方案可能是使用DTO,并在每次查询JPA层返回的数据后感觉到它们。