我有一个简单的应用程序,它通过 Hibernate 从 db (MySQL 5.1) 上的一个表中获取一些数据并显示内容。使用的主要框架是 Spring 3.0。查询在 @Transactional(read-only) (+第二缓存级别)中正确运行。问题出现在针对同一页面运行一些具有 20/30 请求的并发测试。一些页面请求返回 500 而不是 200。我想这是由于 @Transactional 不管理多线程访问(如果我错了,请纠正我)。
在控制器中,我有这样的东西:
List<String> names = usersService.getUserNames(); // this executes query in @Transactional env
doSomething(names);
日志说“doSomething”抛出了一些 NullPointerException,因为列表中没有传递的数据。
有没有办法用 Spring+Hibernate 实现一个多线程访问管理器来管理对 db 的并发请求?