# kotlin+spring webflux+r2dbc+mysql 协程web响应式整合 **Repository Path**: tianchaohongyu/rf ## Basic Information - **Project Name**: kotlin+spring webflux+r2dbc+mysql 协程web响应式整合 - **Description**: spring 响应式框架使用ktolin协程进行开发的基本示例 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-09-12 - **Last Updated**: 2022-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 响应式web框架 ### 技术选型 1. kotlin 支持协程 1. reactive 支持响应式类型与协程下普通类型之间转换 1. spring web flux 支持spring mvc注解 1. spring data r2dbc 支持查询方法、事务 1. lombok kotlin官方测试阶段,不完全兼容 ### 示例 ```kotlin @RestController @RequestMapping("/post") open class PostApi(val postDao: PostDao, val postService: PostService) { @GetMapping("all") open suspend fun all(): List { return postDao.findAll().collectList().awaitFirst(); } @GetMapping("create") open suspend fun create(post: Post): Post { return postDao.save(post).awaitFirst() } @GetMapping("/{id}") open suspend fun get(@PathVariable("id") id: Int): Post? { return postDao.findById(id).awaitFirstOrNull() } @GetMapping("/findByTitleContains") open suspend fun findByTitleContains(name: String): List { return postDao.findByTitleContains(name) } @GetMapping("/test") open suspend fun test(): List { return postService.test1() } @GetMapping("/{id}/update") open suspend fun update(@PathVariable("id") id: Int, post: Post): Post { return postDao.findById(id) .map { p -> p!!.title = post.title p.content = post.content p } .flatMap { p -> postDao.save(p) } .awaitFirst(); } @GetMapping("/{id}/delete") open suspend fun delete(@PathVariable("id") id: Int) { postDao.deleteById(id).awaitFirst() } } ```