在Spring MVC中打开事务并与数据库建立连接的最佳方法是什么

时间:2019-03-02 07:41:44

标签: java mysql spring spring-mvc

几个月后,我已经将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进行交易。...依此类推。

请解决我的一个交易中没有连接的问题吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

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