之前的代码是单线程跑,由定时任务触发,考虑到以后数据量可能变大,就改用多线程处理,改完之后进行单元测试报错:
org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.alibaba.druid.pool.DataSourceClosedException: dataSource already closed at Wed Feb 26 18:33:44 CST 2025
大概意思就是当调用Mapper的时候,数据库连接被关闭了,想了想单线程的时候没事,为啥改为多线程就有问题了,上网查看SpringBoot Test 多线程报错的根本原因(dataSource already closed)_java_脚本之家
发现是由于多线程是异步处理,当执行到调用Mapper的时候,SpringBootTest 启动类的主线程方法已经执行完了,开始销毁容器,导致链接关闭。
解决办法,就是在 单元测试的主线程方法最后面 睡几秒钟,等子线程中的业务执行完,主线程再结束,这样就不会报错了。不过这个错就是出现在单元测试情况下,正常其项目进行调用,Spring容器是不会销毁的