前言
使用线程池插入数据报Could not open JDBC Connection for transaction 异常
Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Fri Sep 01 18:02:49 CST 2017
原因分析
这个异常是因为项目数据源已经被关闭了而线程无法插入数据到数据库。
因为这个是测试案例,在开发过程中主线程把任务丢给线程池之后自己就直接执行完毕导致关闭了数据源。在实际生产中主线程并不会关闭,所以不会出现这个问题。
解决方案
在主线程把任务丢进线程池后睡一会,待线程池处理完数据再关闭进程、关闭数据源。
AcceptorSaveOrderThread thread= new AcceptorSaveOrderThread(orderService,receiveConsumptionData)
//待子线程执行完再执行主线程代码
thread.join();
OrderConstant.FIXED_THREAD_POOL.execute();
//让主线程休息10s
Thread.sleep(10000);
错误信息
2017-09-01 18:02:48,986 WARN 192.168.99.1 [main] c.b.m.mapper.AutoSqlInjector [AutoSqlInjector.java :137] class com.bosssoft.itfinance.payqrcode.order.biz.entity.Settle ,Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
2017-09-01 18:02:49,212 INFO 192.168.99.1 [main] c.t.o.d.IOrderDubboServiceTest [IOrderDubboServiceTest.java :25] =======测试上传二维码数据服务接口开始=======
2017-09-01 18:02:49,348 INFO 192.168.99.1 [main] c.t.o.d.IOrderDubboServiceTest [IOrderDubboServiceTest.java :33] {
"batchNo":"20170901测试批次号","consumeTotal":2,"data":[{
"amt":231646432,"deptId":"16546123653","inBoundTime":"20170901141655","inIndustryData":{
"inBoundRouteNo":"f12354646","inBoundStationBoard":"f123456789","inBoundTerminalNo":"f1264545322","lat":1233.232,"lng":1233.232},"inQrCode":"1231231","inboundQrCode":"asd23123131","orderNo":"first123456","outBoundQrCode":"513523123","outBoundTime":"20170901152233","outIndustryData":{
"lat":1266.232,"lng":1266.232,"outBoundRouteNo":"s12354646","outBoundStationBoard":"s1235645","outBoundTerminalNo":"s123456789"},"outQrCode":"1263462","payOrgId":"zhifubao12346","platformUserId":"ZhiXy1321654","settleAccount":"1321645489464","useDesc":"用码摘要"},{
"amt":231646432,