Reputation: 14772
So starting a new project and i want to use r2dbc and webflux, been looking into what support there is to handle database migration. The last answer i could find here was from july 2019 that liquibase does not support R2DBC and after googling, this seems to still be the case.
The dream would be to use r2dbc-h2
while developing locally, and then use something like postgres during production. Liquibase would manage the table structure both locally and in production.
Been trying to google a bit about how such a setup would look like and there is very little information out there.
I have been thinking about setting up the tables using the liquibase-maven-plugin
, but i don't know if that will work with r2dbc-h2
.
So several questions:
This is a very black hole for me, does any have any information?
Upvotes: 10
Views: 13707
Reputation: 11
Maven dependencies required for integration
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
<version>4.18.0</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-postgresql</artifactId>
<version>${r2dbc-postgresql.version}</version>
</dependency>
Applcation.yml configuration
spring:
r2dbc:
username: postgres
password: password1
url: r2dbc:postgresql://localhost:5433
liquibase:
url: jdbc:postgresql://localhost:5433/postgres
user: postgres
password: password1
change-log: liquibase-changeLog.xml
Nothing else is required no manual beans or any other configuration is required
Upvotes: 0
Reputation: 39
As of Spring Boot 2.6.3 with Spring Framework 5.3.15, the following configuration works for R2DBC with Liquibase
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
//database
implementation "io.r2dbc:r2dbc-postgresql"
runtimeOnly 'org.postgresql:postgresql'
//liquibase
implementation "org.liquibase:liquibase-core"
runtimeOnly 'org.springframework:spring-jdbc'
testImplementation 'io.projectreactor:reactor-test'
}
spring:
main:
web-application-type: REACTIVE
r2dbc:
url: r2dbc:postgresql://localhost/mydb
username: postgres
liquibase:
url: jdbc:postgresql://localhost/mydb
Upvotes: 1
Reputation: 339
Complementing @bilak's answer, you must add the following dependency to your pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
I was facing the same problem and I had added the properties user
and URL
to Liquibase configuration on my application.yml, and then Spring started to claim about one class not found, adding this dependency solved the issue
Upvotes: 4
Reputation: 4932
I think there should be no problem using 2 drivers in application. As liquibase uses standard jdbc driver you can configure it to use that one for migrations and configure r2dbc to run the application. Maybe some tweeks needs to be done but I would start with something like:
spring:
liquibase:
url: jdbc:postgresql://localhost:5432/mydb
user: postgres
r2dbc:
url: r2dbc:postgresql://localhost:5432/mydb
username: postgres
and include both libraries:
io.r2dbc:r2dbc-postgresql
org.postgresql:postgresql
If there is error keep us posted.
note: for testing you can use testcontainers or embedded postgresql also
Upvotes: 31