Java:压力测试

时间:2017-04-27 15:00:17

标签: java spring jpa locking

我有一个小的wicket应用程序,用户可以登录。 当他们登录时,会在数据库中写入日志。在持久化之前,对行进行计数,当我运行压力测试时,有30个用户同时登录和退出,这就是异常的来源。

这个countig和persisting发生在一个带有@Transactional注释的Spring-DAO中,还有一个连接池。计数方法如下所示:

private long getLogSize() {
    final CriteriaBuilder cb = getCriteriaBuilder();
    final CriteriaQuery<Long> cq = cb.createQuery(Long.class);
    final Root<UserLog> userLog = cq.from(UserLog.class);
    cq.select(cb.count(userLog ));
    return query.getSingleResult();
}

那么如何锁定桌子并防止比赛情况呢?将查询设置为setLockMode(LockModeType.PESSIMISTIC_READ)不起作用,只有我得到:MySQLTransactionRollbackException:尝试获取锁定时发现死锁;尝试重新启动交易。

0 个答案:

没有答案