springframework query org findbyid example data crudrepository baeldung java java-8 spring-data-jpa java-stream

java - query - spring findbyid optional



¿Tengo que cerrar los resultados de la consulta finalizada y transmitida en un bloque try-with-resources-block? (1)

Esta pregunta ya tiene una respuesta aquí:

en los datos de Spring Data JPA dice sobre transmisiones:

Una secuencia potencialmente envuelve los recursos específicos del almacén de datos subyacentes y, por lo tanto, debe cerrarse después del uso. Puede cerrar el Stream manualmente con el método close () o usando un bloque Java 7 try-with-resources.

Ver: http://docs.spring.io/spring-data/jpa/docs/1.10.1.RELEASE/reference/html/#repositories.query-streaming

Si proceso una secuencia con forEach , un conteo u otra operación de terminal, ya debería estar cerrada (y no volver a utilizarla) y no tendría que ajustar la secuencia en try-resources-block adicional (dado que mis bloques no arrojar alguna excepción), ¿o estoy equivocado aquí?


Las API de Java describen este tema de la siguiente manera:

Las BaseStream.close() tienen un método BaseStream.close() e implementan AutoCloseable , pero casi todas las instancias de transmisión en realidad no necesitan cerrarse después de su uso. En general, solo las secuencias cuya fuente sea un canal IO (como las devueltas por Files.lines(Path, Charset)) requerirán cierre. La mayoría de las transmisiones están respaldadas por colecciones, matrices o funciones de generación, que no requieren una administración de recursos especial. (Si una secuencia requiere cierre, puede declararse como recurso en una declaración try-with-resources).

También tenga en cuenta la API para Files.lines(Path, Charset)) :

La secuencia devuelta encapsula un Reader. Si se requiere la eliminación oportuna de los recursos del sistema de archivos, se debe utilizar la construcción try-with-resources para garantizar que el método de close la secuencia se invoque después de que se completen las operaciones de la secuencia.

La conclusión es: si la secuencia corresponde a un recurso que, en escenarios normales, debe cerrarse después del uso (como IO), utilícelo en una declaración try-with-resources.