我有一个grails应用程序,它使用石英作业自动使用外部服务提供的数据来扩充文档。 quartz作业使用非事务性服务来查询和更新mongodb中的文档。实际查询和更新使用mongo的本机驱动程序(无GORM)。一旦所有连接都被消耗,quartz作业和Service不会返回连接池的数据库连接,从而导致错误“连接等待超时”。
我可以通过在生成的线程中查询和更新后添加对DB.requestDone()的调用来解决问题。我不确定为此目的使用requestDone的后果。
在没有调用requestStart的情况下调用requestDone会产生负面影响吗?
requestStart / requestDone是否存在任何线程问题。例如,当调用requestDone时,如果另一个线程正在查询Mongo,会发生什么?
是否有更好的方法可以确保将数据库连接返回到连接池?
仅供参考,我尝试添加cursor.close(),但这并没有解决问题。