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.
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étodoBaseStream.close()
e implementanAutoCloseable
, 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 porFiles.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 declose
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.