N + 1选择generete CommunicationsException

时间:2016-12-22 13:17:05

标签: java spring hibernate spring-boot spring-data

我有简单的控制器

@GetMapping("users")
List<User> getUsers() {
我在里面有代码:

for(int i = 0; i<1000;++i)
  userRepository.getOne(i); 
几分钟后,我有时会得到:

org.hibernate.exception.JDBCConnectionException: could not extract ResultSet

但95%的电话有效。

如果我减少迭代次数:

for(int i = 0; i<100;++i)
      userRepository.getOne(i);

它始终有效。

我的设置:

spring.datasource.url=jdbc:mysql://test.dailyrazor.com:3306/test?autoReconnect=true&failOverReadOnly=false&maxReconnects=10
spring.datasource.username=test
spring.datasource.password=test

代码只是为了说明问题,一个真实的例子来自N + 1选择

如何防止org.hibernate.exception.JDBCConnectionException:无法提取ResultSet?

1 个答案:

答案 0 :(得分:-1)

总是喜欢在服务中实现你的逻辑。 并在服务上使用@Transactional来维护整个n + 1次迭代的事务。

@Service
@Transactional
public returnType serviceName(){
 // write your logic here
} 

从您的控制器调用此服务。