1

I have an issue, I want to work with kotlin-springboot-r2dbc-liquibase

So, when put my build.gradle.kts like this

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "3.0.6"
    id("io.spring.dependency-management") version "1.1.0"
    id("org.graalvm.buildtools.native") version "0.9.20"
    id("org.jetbrains.kotlin.plugin.jpa") version "1.8.21"
    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
}

group = "com.abahafart.kotlin.template"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
//  implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.liquibase:liquibase-core")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("mysql:mysql-connector-java:8.0.32")
//  runtimeOnly("dev.miku:r2dbc-mysql:0.8.2.RELEASE")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3333/library?tlsVersion=TLSv1.2
    username: mysql
    password: mysqlpw
#  r2dbc:
#    url: r2dbc:mysql://localhost:3333/library?tlsVersion=TLSv1.2
#    username: mysql
#    password: mysqlpw
#    pool:
#      enabled: true
#      initial-size: 1
#      max-size: 20

It works that I excpected, connection to database and liquibase work

But if I want to work with r2dbc and liquibase with my gradle and application look like this, liquibase does not work, but connection to database works

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "3.0.6"
    id("io.spring.dependency-management") version "1.1.0"
    id("org.graalvm.buildtools.native") version "0.9.20"
    id("org.jetbrains.kotlin.plugin.jpa") version "1.8.21"
    kotlin("jvm") version "1.7.22"
    kotlin("plugin.spring") version "1.7.22"
}

group = "com.abahafart.kotlin.template"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

configurations {
    compileOnly {
        extendsFrom(configurations.annotationProcessor.get())
    }
}

repositories {
    mavenCentral()
}

dependencies {
//  implementation("org.springframework.boot:spring-boot-starter-data-jdbc")
    implementation("org.springframework.boot:spring-boot-starter-data-r2dbc")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.liquibase:liquibase-core")
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")
    developmentOnly("org.springframework.boot:spring-boot-devtools")
    runtimeOnly("mysql:mysql-connector-java:8.0.32")
    runtimeOnly("dev.miku:r2dbc-mysql:0.8.2.RELEASE")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
}

tasks.withType<KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = listOf("-Xjsr305=strict")
        jvmTarget = "17"
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}


spring:
#  datasource:
#    url: jdbc:mysql://localhost:3333/library?tlsVersion=TLSv1.2
#    username: mysql
#    password: mysqlpw
  r2dbc:
    url: r2dbc:mysql://localhost:3333/library?tlsVersion=TLSv1.2
    username: mysql
    password: mysqlpw
    pool:
      enabled: true
      initial-size: 1
      max-size: 20

So, my question here is: What dependecy I need to liquibase work? Why does liquibase work with jdbc and not with r2dbc?

Thanks

5frags
  • 157
  • 10

1 Answers1

1

Liquibase is based on JDBC not R2DBC, you therefore need to provide a JDBC connection to it.

This answer to a similar question explains how to do that with Boot.

Jens Schauder
  • 77,657
  • 34
  • 181
  • 348