mvc formulario form example errors ejemplo spring spring-data spring-data-jpa reactive

example - spring mvc formulario ejemplo



ReactiveCrudRepository para usar Hibernate en primavera (2)

¿Es posible usar Hibernate y Mysql con ReactiveCrudRepository lugar de CrudRepository ? He intentado algunas muestras con Spring Data Jpa e Hibernate, pero no pude hacer que funcionara. Solo pude encontrar algunas muestras en ReactiveCrudRepository para MongoDB y cassandra .


¿Es posible usar Hibernate y Mysql con ReactiveCrudRepository lugar de CrudRepository ?

TL; DR:

No con Hibernate y MySQL, sino con R2DBC y Postgres, Microsoft SQL Server o H2. Echa un vistazo a Spring Data R2DBC .

Versión larga

¿Por qué no JPA?

Con Hibernate / JPA incluido, esto no sucederá en un futuro previsible. JPA se basa en la idea de que carga parte de su modelo de datos en la memoria, manipula el modelo de objeto resultante y deja que JPA transforme estos cambios. Todo esto dentro de una sola transacción.

Esto es algo opuesto a cómo se trata una tienda reactiva en la que intenta realizar cambios atómicos e intenta desacoplar la carga, el procesamiento y el almacenamiento, y todo esto sin bloquear.

¿Por qué no JDBC?

Así que tenemos que mirar el nivel de tecnología debajo de JPA: JDBC. Pero JDBC sigue bloqueando: envía una declaración SQL a su base de datos y luego JDBC bloqueará hasta que obtenga el resultado. Y de nuevo esto va en contra de la idea de reactivo: nunca bloquear. Uno podría envolver esto en un grupo de hilos para mitigar esto en cierta medida, pero eso es más una solución que una solución.

¿Por qué R2DBC?

Hay algunos controladores adecuados para algunas bases de datos que podrían usarse para repositorios reactivos. Pero son de propiedad y, por lo tanto, no son una buena base para algo que realmente debería funcionar en todas las bases de datos relacionales (relevantes).

Durante algún tiempo, el equipo de Spring Data esperaba que ADBA llenara ese vacío. Pero las discusiones en la lista de correo dejaron en claro que ADBA no tenía el objetivo de ser reactivo, sino solo de forma asíncrona. De nuevo, no es lo que necesitamos para una abstracción de repositorio reactivo.

Así que a principios de 2018, varias personas que viven en la intersección o reactivas y relacionales decidieron que necesitamos un estándar para el acceso reactivo a la base de datos.

R2DBC es una propuesta para tal estándar. La esperanza es que o bien ayude a convencer a Oracle para que mueva ADBA a un enfoque reactivo o si eso no sucede, se convierte en el estándar en sí mismo.

Y con tres implementaciones ya disponibles, las posibilidades para la segunda opción parecen prometedoras.

El propio R2DBC es principalmente un SPI, es decir, una API que deben implementar los proveedores de bases de datos. El SPI está diseñado de manera que impone requisitos mínimos a los implementadores. Pero esto también hace que el uso de R2DBC sea un tanto engorroso. La idea es que otras bibliotecas aumenten y construyan bibliotecas diseñadas para su uso sobre ese SPI, como sucedió con JDBC.

Datos de primavera R2DBC

Spring Data R2DBC es una de esas bibliotecas y ofrece lo que pidió: Soporte para ReactiveCrudRepository aunque es independiente de JPA / Hibernate y todavía no hay soporte para MySQL.

Estado de los proyectos.

Tanto R2DBC como Spring Data R2DBC aún no tenían un lanzamiento de producción y tardarán al menos varios meses en llegar allí.

Spring Data R2DBC acaba de lanzar el primer hito. Vea el artículo de lanzamiento para sus capacidades actuales .

R2DBC está en su sexto hito. Vea el artículo de lanzamiento para más detalles .

Vea también esta respuesta: ¿Por qué Spring no proporciona clientes reactivos (sin bloqueo) para bases de datos relacionales?

Respuesta original como referencia para los arqueólogos:

A partir de ahora (enero 2017) no es posible.

La versión actualmente relevante para la parte reactiva de Spring Data es Spring Data Kay M1 (puede verificar si hay una versión más nueva disponible en la página de inicio del proyecto )

Y una publicación en el blog del equipo de Spring Data sobre ese lanzamiento y específicamente las partes reactivas comienza con (énfasis mío):

Spring Data Kay M1 es la primera versión que viene con soporte para acceso de datos reactivos. Su conjunto inicial de tiendas compatibles (MongoDB, Apache Cassandra y Redis ) ya incluyen todos los controladores reactivos de la nave, lo que los convierte en candidatos muy naturales para este prototipo.

La razón es que no hay una forma estándar de no bloqueo para acceder a una base de datos relacional. Así que solo los que soportan este tipo de API son compatibles ahora.

Uno podría implementar un ReactiveCrudRepository utilizando JPA o JDBC y delegar el trabajo a un grupo de subprocesos. Esto proporcionaría una API asíncrona en el exterior, pero aún así consumiría los recursos para los subprocesos y se bloquearía entre accesos de datos independientes, por lo que solo se realizaría una pequeña parte de los beneficios del enfoque reactivo.


Según cita de la respuesta anterior.

Uno podría implementar un ReactiveCrudRepository utilizando JPA o JDBC y delegando el trabajo a un grupo de subprocesos. Esto proporcionaría una API asíncrona en el exterior, pero aún así consumiría los recursos para los subprocesos y se bloquearía entre accesos de datos independientes, por lo que solo se realizaría una pequeña parte de los beneficios del enfoque reactivo.

James Ward afirma que puede ser no bloqueante. Quiero decir que le pregunté:

Sí, está bien, pero ¿ScalikeJDBC-Async no está haciendo exactamente lo mismo? ¿Simplemente poniendo la invocación de la consulta en otro grupo de hilos?

y él respondió

No, porque ScalalikeJDBC-Async usa https://github.com/mauricio ... que en realidad es un controlador de base de datos JDBC sin bloqueo (NIO).

source

Así que puedes ser reactivo reemplazando los datos de hibernate + spring con postgresql-async (debería funcionar con mysql).