bbossgroups/bboss

bBoss项目运行一段时间就会有连接池报错

Opened this issue · 5 comments

stack_trace:org.frameworkset.tran.ESDataImportException: com.frameworkset.common.poolman.NestedSQLException: Request Connection failed:DB Pool[search_sync_industry] is stopped. Please restarted the pool. at org.frameworkset.tran.db.input.SQLBaseDataTranPlugin.doImportData(SQLBaseDataTranPlugin.java:263) at org.frameworkset.tran.BaseDataTranPlugin.importData(BaseDataTranPlugin.java:196) at org.frameworkset.tran.DataStream.execute(DataStream.java:74) at com.ld.actuator.service.BaseImporter.imports(BaseImporter.java:113) at com.ld.actuator.handler.building.CompanyBuildingHandler.lambda$null$2(CompanyBuildingHandler.java:117) at com.ld.actuator.core.RunHandler.run(RunHandler.java:37) at com.ld.actuator.handler.building.CompanyBuildingHandler.lambda$execute$3(CompanyBuildingHandler.java:117) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: com.frameworkset.common.poolman.NestedSQLException: Request Connection failed:DB Pool[search_sync_industry] is stopped. Please restarted the pool. at com.frameworkset.common.poolman.util.JDBCPool.requestConnection(JDBCPool.java:2177) at com.frameworkset.common.poolman.util.SQLManager.requestConnection(SQLManager.java:357) at com.frameworkset.common.poolman.StatementInfo.init(StatementInfo.java:208) at com.frameworkset.common.poolman.PreparedDBUtil.innerExecute(PreparedDBUtil.java:1261) at com.frameworkset.common.poolman.PreparedDBUtil.executePreparedForObject(PreparedDBUtil.java:1211) at com.frameworkset.common.poolman.PreparedDBUtil.executePreparedWithRowHandler(PreparedDBUtil.java:1171) at com.frameworkset.common.poolman.PreparedDBUtil.executePreparedWithRowHandler(PreparedDBUtil.java:1166) at com.frameworkset.common.poolman.SQLInfoExecutor.queryWithDBNameByNullRowHandler(SQLInfoExecutor.java:1477) at com.frameworkset.common.poolman.SQLExecutor.queryWithDBNameByNullRowHandler(SQLExecutor.java:1405) at org.frameworkset.tran.db.input.SQLBaseDataTranPlugin.commonImportData(SQLBaseDataTranPlugin.java:148) at org.frameworkset.tran.db.input.SQLBaseDataTranPlugin.doImportData(SQLBaseDataTranPlugin.java:226)
猜想:
当前连接已经stop了,但是有新的com.frameworkset.common.poolman.util.JDBCPool#requestConnection请求?这个是连接池管理没有做好吗?盼复

@gezhiwei8899 Hi,你好,首先将bboss升级到最新版本,参考文档:

https://esdoc.bbossgroups.com/#/db-es-tool

如果在同一个进程中运行多个数据采集作业,并且采用sqlite作为增量状态管理,由于sqlite的单线程数据库限制,必须每个作业一个独立的sqlite数据库,因此除了设置不同的sqlite数据库文件路径,还需指定不同的statusDBname,例如:

作业1

importBuilder.setStatusDbname("job1");
importBuilder.setLastValueStorePath("/app/data/job1");//记录上次采集的增量字段值的文件路径,作为下次增量(或者重启后)采集数据的起点
作业2

importBuilder.setStatusDbname("job2");
importBuilder.setLastValueStorePath("/app/data/job2");//记录上次采集的增量字段值的文件路径,作为下次增量(或者重启后)采集数据的起点
sqlite作为一个本地单线程文件数据库,可能在一些场景下无法满足要求,譬如要做监控界面实时查看作业数据采集状态,尤其是在采用分布式作业调度引擎时,定时增量导入需要指定mysql等关系型增量状态存储数据库。

联系我们

https://www.bbossgroups.com/forum.html

@yin-bp 现网升级不太容易。还是希望找到问题点。复现问题也不太容易。能告知新版本对这块做了什么优化吗?

@yin-bp 现网升级不太容易。还是希望找到问题点。复现问题也不太容易。能告知新版本对这块做了什么优化吗?

上面已经回答了你的问题,如果在进程中存在多个作业运行,同时存在启动和停止控制操作,那么可能会出现你说的问题,解决的方法就是升级到最新的bboss版本,然后每个作业指定自己的StatusDbname和LastValueStorePath

importBuilder.setStatusDbname("job2");
importBuilder.setLastValueStorePath("/app/data/job2")

另外如果是在容器中运行作业,当容器停止过程中如果作业没停,但是相关的连接池已经停了,也会出现你说的问题

bboss升级还是比较方便的,修改一下Maven坐标的版本号就可以了哦

bboss版本升级变更记录,可以访问一下文档查看:

https://esdoc.bbossgroups.com/#/changelog

可以加入bboss的开发交流qq群讨论问题:21220580 166471282

@gezhiwei8899 不过你这个问题,还和状态管理数据源无关,那就可能是下面的原因:

如果是在容器中运行作业,当容器停止过程中如果作业没停,但是相关的连接池已经停了,也会出现你说的问题