我写了一个 DAL,它抽象了对 MySQL 数据库数据的访问,我正面临着一个在 MySQL 中运行的进程的恼人问题。
我有一个User
Entity
(针对User
数据库表)和这个UserDAO
public class UserDAO {
@PersistenceContext private EntityManager entityManager;
public User create(User user)
{
...
}
public void delete(String username)
{
...
}
public User findByUsername(String username)
{
User user = entityManager.find(User, username);
return user;
}
public User update(User user) {
...
}
}
然后这是我正在运行的测试:
@RunWith(CdiRunner.class)
@AdditionalClasses(EntityManagerProvider.class)
public class DALUserTest {
@Inject UserDAO userDAO;
@Test
public void testGetUser() {
User user = userDAO.findByUsername("myUsername");
assertNotNull(user);
}
}
测试运行正常。问题是,如果我去 MySQL 控制台并运行命令
show processlist;
我得到以下输出
正如你所看到的,测试执行(当然是在它终止之后)在 MySQL 的后台留下了一个挂起的进程,它会一直留在那里直到有人杀死它。此外,每当我运行测试时,它都会添加越来越多的待处理进程。
更多信息:我persistence.xml
用来配置连接。Hibernate 用作 JPA 的实现,HikariCP用作连接池提供者。
你怎么看这个问题?会不会是 HikariCP(或 Hibernate)错误或 EntityManager 类的错误使用?
谢谢