start.spring.io 最近可以直接选取mariadb接入R2DBC了,大致需要加入以下几个包:

 <!--引入r2dbc-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-r2dbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mariadb</groupId>
            <artifactId>r2dbc-mariadb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!--<dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-spi</artifactId>
        </dependency>-->
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-test</artifactId>
        </dependency>
        <!--连接池-->
        <dependency>
            <groupId>io.r2dbc</groupId>
            <artifactId>r2dbc-pool</artifactId>
        </dependency>

数据库配置(mysql 稍微自己改一下):

r2dbc:
    username: root
    password: ******
    url: r2dbc:mariadb://localhost:1234/dataname
    #initialization-mode: always

推荐创建一个template Bean去操作数据库,当然也可以不用bean

import io.r2dbc.spi.ConnectionFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate

@Configuration
class MariadbConfig(
    @Autowired val connectionFactory: ConnectionFactory
){

    @Bean
    fun databaseTemplate () = R2dbcEntityTemplate(connectionFactory)

}

老版本使用DatabaseClient(spring-data-r2dbc-1.1.0.RELEASE.jar),
新版本的DatabaseClient(spring-r2dbc-5.3.3.jar)下已经没有insert等方法,但是有一个sql方法执行sql语句。
所以,新版本可使用template

class controller(
    @Autowired val template: R2dbcEntityTemplate
) { 
 template.databaseClient.sql() //创建表
 template.insert()
 template.update()
 template.delete()
 ...
 }

mariadb/mysql R2DBC(CRUD)方式接入spring boot (二)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐