1. 添加依赖
在 pom.xml
文件中添加以下依赖:
<dependencies><!-- Spring Boot WebFlux --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><!-- Spring Data R2DBC --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-r2dbc</artifactId></dependency><!-- R2DBC 驱动(以 PostgreSQL 为例) --><dependency><groupId>org.postgresql</groupId><artifactId>r2dbc-postgresql</artifactId></dependency><!-- 测试相关依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.projectreactor</groupId><artifactId>reactor-test</artifactId><scope>test</scope></dependency>
</dependencies>
2. 配置数据库连接
在 application.properties
或 application.yml
文件中配置数据库连接信息:
spring.r2dbc.url=r2dbc:postgresql://<db_url>:<port>/<db_name>
spring.r2dbc.username=<username>
spring.r2dbc.password=<password>
3. 创建实体类和仓库接口
创建一个实体类(如 User
),并使用 @Table
注解标记:
import org.springframework.data.annotation.Id;
import org.springframework.data.relational.core.mapping.Table;@Table("users")
public class User {@Idprivate Long id;private String name;private String email;// 省略 getter 和 setter 方法
}
然后创建一个仓库接口,继承 ReactiveCrudRepository
:
java复制
import org.springframework.data.repository.reactive.ReactiveCrudRepository;public interface UserRepository extends ReactiveCrudRepository<User, Long> {
}
4. 创建服务层和控制器
在服务层中注入 UserRepository
,并实现业务逻辑:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public Flux<User> getAllUsers() {return userRepository.findAll();}public Mono<User> createUser(User user) {return userRepository.save(user);}public Mono<User> updateUser(Long id, User user) {return userRepository.findById(id).flatMap(existingUser -> {existingUser.setName(user.getName());existingUser.setEmail(user.getEmail());return userRepository.save(existingUser);});}public Mono<Void> deleteUser(Long id) {return userRepository.deleteById(id);}
}
在控制器中定义 REST API:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMappingpublic Flux<User> getAllUsers() {return userService.getAllUsers();}@PostMapping@ResponseStatus(HttpStatus.CREATED)public Mono<User> createUser(@RequestBody User user) {return userService.createUser(user);}@PutMapping("/{id}")public Mono<ResponseEntity<User>> updateUser(@PathVariable Long id, @RequestBody User user) {return userService.updateUser(id, user).map(ResponseEntity::ok).defaultIfEmpty(ResponseEntity.notFound().build());}@DeleteMapping("/{id}")public Mono<ResponseEntity<Void>> deleteUser(@PathVariable Long id) {return userService.deleteUser(id).then(Mono.just(ResponseEntity.ok().<Void>build())).defaultIfEmpty(ResponseEntity.notFound().build());}
}
5. 启动类
在主类上添加 @EnableR2dbcRepositories
注解以启用 R2DBC 仓库支持:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.data.r2dbc.repository.config.EnableR2dbcRepositories;@SpringBootApplication
@EnableR2dbcRepositories
public class SpringReactiveR2DbcApplication {public static void main(String[] args) {SpringApplication.run(SpringReactiveR2DbcApplication.class, args);}
}
6. 运行应用
启动应用后,访问 /users
等接口即可测试响应式数据库操作。