Spring WebFlux and Spring Data don't support Hibernate Reactive natively and you will need to do some boilerplate code work.
If you are familiar with Spring-Data-JPA and the following code snippet
public interface UserRepository extends JpaRepository<User, Long> {
}
You can use the ReactiveHibernateCrudRepository interface in a reactive way
public interface UserRepository extends ReactiveHibernateCrudRepository<User, Long> {
}
- Create a spring-webflux project pom.xml looks like
<properties>
<java.version>17</java.version>
</properties>
<dependences>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>io.smallrye.reactive</groupId>
<artifactId>mutiny-reactor</artifactId>
<version>1.7.0</version>
</dependency>
<dependency>
<groupId>org.github.mbr.hibernate</groupId>
<artifactId>hibernate-reactive-repository</artifactId>
<version>1.0.6-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-mysql-client</artifactId>
<version>4.3.7</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependences>
- Create an entity class
import lombok.*;
import javax.persistence.*;
@Getter
@Setter
@Entity
@Table(name = "USERS")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
public Long id;
@Column(name = "name")
public String name;
}
- Create the hibernate reactive repository
public interface UserRepository extends ReactiveHibernateCrudRepository<User, Long> {
}
- Create a Controller
import org.springframework.beans.factory.annotation.Autowired;
import reactor.core.publisher.Flux;
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserRepository userRepository;
public Flux<User> getAllUsers() {
return userRepository.findAll();
}
}
- run app
>mvn spring-boot:run
if you are using
spring-boot-devtools
create spring-devtools.properties in the following path
[PROJECT_PATH]/src/main/resources/META-INF
add the content below and save
restart.include.hibernate-reactive-repository=/hibernate-reactive-repository.*.jar