Spring 数据 JPA 消耗所有连接对象
Spring data JPA consumes all the connection objects
我有一个场景,其中数据从 excel sheet 上传到 mysql 数据库。我正在使用 spring 数据 jpa。并且服务在用从 excel sheet 中获取的数据填充它们以保存在 db 中后递归调用实体。这会在特定负载后创建“无法获取 jdbc 连接”。
我尝试使用@Transactional 来了解优势。然后我考虑在代码中手动使用 EntityManager 并控制事务边界,以便实体的所有递归保存调用都发生在一个事务中,从而发生在一个连接对象中。我只是想检查一下这是否是一个好主意,或者是否有其他我应该采用的性能更高的方法。不用说无论如何我必须通过实体来完成。
我的回答完全基于假设实现需求的方式是错误的,因为问题中没有共享任何代码。
通过您的方法,是的,您将 运行 断开连接,因为实体填充肯定比将实体保存在数据库中快得多,并且由于您递归地执行此操作,您的应用程序将 运行 如果数据量非常大,在某个时间点断开连接,数字肯定是这里的一个因素。
我更喜欢的另一种方法是,您可以准备您的实体(假设所有数据都是针对一个公共实体 class)并存储在一个集合中,一旦准备就绪,您就可以保留所有数据在一个事务中使用 saveAll() 方法。
如果数据不是针对普通实体,您可以创建多个不同实体的列表,并在处理 excel sheet.
后启动数据库操作
我有一个场景,其中数据从 excel sheet 上传到 mysql 数据库。我正在使用 spring 数据 jpa。并且服务在用从 excel sheet 中获取的数据填充它们以保存在 db 中后递归调用实体。这会在特定负载后创建“无法获取 jdbc 连接”。
我尝试使用@Transactional 来了解优势。然后我考虑在代码中手动使用 EntityManager 并控制事务边界,以便实体的所有递归保存调用都发生在一个事务中,从而发生在一个连接对象中。我只是想检查一下这是否是一个好主意,或者是否有其他我应该采用的性能更高的方法。不用说无论如何我必须通过实体来完成。
我的回答完全基于假设实现需求的方式是错误的,因为问题中没有共享任何代码。
通过您的方法,是的,您将 运行 断开连接,因为实体填充肯定比将实体保存在数据库中快得多,并且由于您递归地执行此操作,您的应用程序将 运行 如果数据量非常大,在某个时间点断开连接,数字肯定是这里的一个因素。
我更喜欢的另一种方法是,您可以准备您的实体(假设所有数据都是针对一个公共实体 class)并存储在一个集合中,一旦准备就绪,您就可以保留所有数据在一个事务中使用 saveAll() 方法。 如果数据不是针对普通实体,您可以创建多个不同实体的列表,并在处理 excel sheet.
后启动数据库操作