java 坑死人的junit单元测试 ,多线程,连接池被关闭,线程中无法继续执行程序,报错: HikariDataSource (HikariPool-1) has been closed.

前言:调了一早上,到心态 崩溃,突然反应过来,真的是欲哭无泪呀,索性遭到了原因并解决了,大吉大利!大吉大利!

1.场景描述:

  执行方式:junit单元测试
  执行程序:

	@Test
	public void test() {
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				recordService.list();
			}
		}).start();
	}

  错误信息:Error querying database.  Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLException: HikariDataSource HikariDataSource (HikariPool-1) has been closed.

2.错误分析-数据库连接中断,无法连接数据库获取数据

3.问题原因-junit主线程执行完成之后会调用System.exit()方法,将JVM关闭,所以子线程虽然在执行,但是却获取不到数据库链接了

4.问题处理-

方式一:在junit单元测试主线程最后加上线程等待时间 Thread.sleep(10000);

方式二:多线程避免在junit中测试,使用接口测试等其他方式

你可能感兴趣的:(java,junit,单元测试)