J'ai un dépôt Spring data
:méthode de dépôt de printemps qui reviennent flux Java 8 ne ferme pas la connexion JDBC
@Repository
interface SomeRepository extends CrudRepository<Entity, Long> {
Stream<Entity> streamBySmth(String userId);
}
J'appelle cette méthode dans une fève de printemps:
@Scheduled(fixedRate = 10000)
private void someMethod(){
someRepository.streamBySmth("smth").forEach(this::callSomeMethod);
}
Je suis en utilisant la base de données MySQL. Et quand je demande en cours d'exécution après quelques invocations de méthode avec succès, il lance une exception:
o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08001
o.h.engine.jdbc.spi.SqlExceptionHelper : Could not create connection to database server.
o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task.
org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Il semble que la connexion n'a pas été fermée correctement au printemps. Si j'ai changé la valeur de retour de méthode à List
de Stream
cela fonctionne correctement.
MISE À JOUR: la version Spring Boot est 1.4.1.RELEASE
Avez-vous essayé d'appeler 'close' sur le flux? – marstran
J'ai essayé, ça n'a pas aidé. Néanmoins, il n'est pas correct de fermer manuellement 'Stream'. –
Je ne suis pas très familier avec le retour d'un 'Stream' d'un dépôt, mais un' Stream' est paresseux, alors comment Spring sait-il quand fermer la connexion? 'Stream' est aussi' AutoClosable', donc vous pouvez l'utiliser dans une clause try-with-resources. – marstran