Deseamos brindarte la mejor respuesta que descubrimos online. Queremos que te sea útil y si puedes comentarnos alguna mejora hazlo con total libertad.
Solución:
Si desea todos los beneficios de reactivo, asíncrono/sin bloqueo, deberá hacer que toda la pila sea asíncrona/sin bloqueo. De hecho, JDBC es inherentemente una API de bloqueo, por lo que no puede crear una aplicación totalmente reactiva/sin bloqueo si necesita acceder a la base de datos a través de JDBC.
Pero aún necesita una base de datos relacional, entonces recomendará usar rxjava2-jdbc
y aquí hay un ejemplo completo del uso de RxJava y RxJava jdbc spring-webflux-async-jdbc-sample
Parece que actualmente Spring webflux es compatible con Mongodb, Redis, etc. nosql reactivo, por lo que en lugar de usar JPA spring-boot-starter-data-mongodb-reactive
.
No sé sobre el soporte anterior, pero a partir del 9 de junio de 2019, ¡puede usar WebFlux con repositorios JPA!
Su pila no tiene que ser completamente reactiva. Me gusta WebFlux, pero necesito una base de datos relacional.
Yo tengo:
- spring-boot-starter-datos-redis-reactivo
- spring-boot-arrancador-webflux
- spring-boot-starter-datos-jpa
editar: (FYI) el código está en Kotlin, pero aún debería funcionar en Java.
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = ["com.example.core.repositories"])
@EnableJpaAuditing
class PersistenceConfig
src/core/modelos/Usuario
@Entity
@Table(name = "user")
class User(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "user_id")
var id: Long,
@Column(name = "username")
var username: String,
@Column(name = "created_date", nullable = false, updatable = false)
@CreatedDate
@Temporal(TemporalType.TIMESTAMP)
val createdDate: Date,
@Column(name = "modified_date")
@LastModifiedDate
@Temporal(TemporalType.TIMESTAMP)
val modifiedDate: Date
) : Serializable
/**
* This constructor is not to be used. This is for hibernate,
* which requires an empty constructor.
*/
constructor() : this(1L, "", "", Date(), Date())
companion object
private const val serialVersionUID = 2398467923L
tengo lo mismo JPA: Reactive Repositories are not supported by JPA.
error cuando todavía estaba devolviendo objetos mono de la consulta Spring Data como Mono
. Sin embargo, si elimina el Mono
envoltorio, debería funcionar bien.
src/core/repositories/UserRepository
@Repository
interface UserRepository: CrudRepository
fun findUserByUsername(username: String): User?