2016-12-22 3 views
1

I einfache SteuerungN + 1 Wählt generete CommunicationsException

@GetMapping("users") 
List<User> getUsers() { 

innen I-Code haben haben:

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

nach wenigen Minuten manchmal bekomme ich:

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

aber für 95 % ruft es auf.

wenn ich die Anzahl der Iterationen zu verringern:

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

Es funktioniert immer. extrahieren konnte nicht:

meine Einstellungen:

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

Code, um das Problem nur zu illustrieren ist, kommt ein echtes Beispiel von N + 1 Wählt

Wie kann ich verhindern org.hibernate.exception.JDBCConnectionException Ergebnismenge?

+0

Können Sie die volle stacktrace posten? – karelss

+0

Das klingt wie die Datenbank die Verbindung schließt, wenn es zu lange geöffnet ist, oder verursacht zu viel Last, oder führt zu viele Aussagen. Ein vollständiger Stacktrace könnte dies beweisen. Vielleicht möchten Sie mit dba sprechen. –

Antwort

-1

immer vorziehen, Ihre Logik in Dienst zu implementieren. und verwenden Sie @Transactional für den Service, um die Transaktion für ganze n + 1 Iteration zu verwalten.

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

rufen Sie diesen Service von Ihrem Controller.