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()
...
}