{"id":24112689,"url":"https://github.com/gudzpoz/r2dbc-jdbc","last_synced_at":"2026-05-06T13:04:09.342Z","repository":{"id":36974729,"uuid":"492116026","full_name":"gudzpoz/r2dbc-jdbc","owner":"gudzpoz","description":"R2DBC over JDBC","archived":false,"fork":false,"pushed_at":"2023-03-10T01:16:46.000Z","size":227,"stargazers_count":1,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-28T14:45:27.180Z","etag":null,"topics":["database","java","r2dbc","reactive","reactive-streams"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gudzpoz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-14T04:56:26.000Z","updated_at":"2024-07-14T13:28:21.000Z","dependencies_parsed_at":"2025-02-28T08:44:39.464Z","dependency_job_id":"f0cc3d62-01dd-4987-9b4f-f12fa99d1069","html_url":"https://github.com/gudzpoz/r2dbc-jdbc","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/gudzpoz/r2dbc-jdbc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gudzpoz%2Fr2dbc-jdbc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gudzpoz%2Fr2dbc-jdbc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gudzpoz%2Fr2dbc-jdbc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gudzpoz%2Fr2dbc-jdbc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gudzpoz","download_url":"https://codeload.github.com/gudzpoz/r2dbc-jdbc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gudzpoz%2Fr2dbc-jdbc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32694980,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","java","r2dbc","reactive","reactive-streams"],"created_at":"2025-01-11T03:59:40.518Z","updated_at":"2026-05-06T13:04:09.294Z","avatar_url":"https://github.com/gudzpoz.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reactive Relational Database Connectivity JDBC Implementation\n\n[![Maven Central](https://img.shields.io/maven-central/v/party.iroiro/r2dbc-jdbc?label=Maven%20Central\u0026color=blue)](https://mvnrepository.com/artifact/party.iroiro/r2dbc-jdbc)\n![Sonatype Nexus (Snapshots)](https://img.shields.io/nexus/s/party.iroiro/r2dbc-jdbc?server=https%3A%2F%2Fs01.oss.sonatype.org\u0026label=Nexus\u0026color=pink)\n[![GitHub](https://img.shields.io/github/license/gudzpoz/r2dbc-jdbc?label=License)](./LICENSE)\n\n[![Build and Publish](https://github.com/gudzpoz/r2dbc-jdbc/actions/workflows/build.yml/badge.svg)](https://github.com/gudzpoz/r2dbc-jdbc/actions/workflows/build.yml)\n[![Test](https://github.com/gudzpoz/r2dbc-jdbc/actions/workflows/test.yml/badge.svg)](https://github.com/gudzpoz/r2dbc-jdbc/actions/workflows/test.yml)\n[![Code Coverage](https://img.shields.io/codecov/c/gh/gudzpoz/r2dbc-jdbc?label=Test%20Coverage)](https://app.codecov.io/gh/gudzpoz/r2dbc-jdbc)\n\nThis project contains a simplistic [Java Database Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/)\nimplementation of the [R2DBC SPI](https://github.com/r2dbc/r2dbc-spi). This implementation is not intended to be used directly,\nbut rather to be used as the backing implementation for a humane client library.\n\nAs for Spring Data, this library provides a `R2dbcDialectProvider`.\nYou may simply set `spring.r2dbc.url` accordingly in your `application.yml/properties`\nand things should work out of the box.\n\nIt requires Java 9.\n\n## Status\n\nIt is a toy project, and I promise there will be bugs.\n\n## Wait, what?\n\n```text\nJDBC Connections                                Reactive\n     /|\\                                         Access\n      |                                             |\n|------------|  Input Jobs (SemiBlockingQueue)     \\|/\n|    The     |  \u003c--------------------------- R2dbcConnections\n|            |\n|  worker(s) |  ---------------------------\u003e   Dispatcher\n|------------|       (SemiBlockingQueue)            |\n                           Output                   |\n                                                   \\|/\n              Executing callbacks in Schedulers.parallel()\n```\n\n## Why?\n\n[R2DBC H2](https://github.com/r2dbc/r2dbc-h2) is not *that* non-blocking. This library, as is shown in the above diagram,\nactually simulates the regular TCP Client-Server connection to provider reactive access.\n\nFor *big* databases like MariaDB or PostgreSQL, you might as well go to [Drivers](https://r2dbc.io/drivers/) to find a\nbetter SPI. However, if you want reactivity for some embedded databases like [H2](https://www.h2database.com),\n[Derby](https://db.apache.org/derby/) or [HSQLDB](https://hsqldb.org/), maybe you can have a go with this.\n\n## Usage\n\nJust follow the guide on [R2DBC](https://r2dbc.io/).\n\n### From Maven Central\n\n[![Maven Central](https://img.shields.io/maven-central/v/party.iroiro/r2dbc-jdbc?label=Maven%20Central\u0026color=blue)](https://mvnrepository.com/artifact/party.iroiro/r2dbc-jdbc)\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\nUsing directly?\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eparty.iroiro\u003c/groupId\u003e\n  \u003cartifactId\u003er2dbc-jdbc\u003c/artifactId\u003e\n  \u003cversion\u003e0.3.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\nUsing directly?\n\n```groovy\nimplementation 'party.iroiro:r2dbc-jdbc:0.3.1'\n```\n\n\u003c/details\u003e\n\n### Use with Spring Data\n\n\u003cdetails\u003e\n\u003csummary\u003eMaven\u003c/summary\u003e\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n  \u003cartifactId\u003espring-boot-starter-data-r2dbc\u003c/artifactId\u003e\n\u003c/dependency\u003e\n\u003cdependency\u003e\n  \u003cgroupId\u003eparty.iroiro\u003c/groupId\u003e\n  \u003cartifactId\u003er2dbc-jdbc\u003c/artifactId\u003e\n  \u003cversion\u003e0.3.1\u003c/version\u003e\n  \u003cscope\u003eruntime\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eGradle\u003c/summary\u003e\n\n```groovy\nimplementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'\nruntimeOnly 'party.iroiro:r2dbc-jdbc:0.3.1'\n```\n\n\u003c/details\u003e\n\nSpring Data requires a `R2dbcDialectProvider` to map repository operations to SQLs.\nSince different databases may differ in SQL grammar, you may set one matching your database with,\nfor example:\n\n```java\nSystem.setProperty(\"j2dialect\", \"org.springframework.data.r2dbc.dialect.H2Dialect\");\n```\n\nCurrently, available dialects in Spring Data Reactive are:\n\n- `org.springframework.data.r2dbc.dialect.H2Dialect`\n- `org.springframework.data.r2dbc.dialect.PostgresDialect`\n- `org.springframework.data.r2dbc.dialect.MySqlDialect`\n- `org.springframework.data.r2dbc.dialect.OracleDialect`\n- `org.springframework.data.r2dbc.dialect.SqlServerDialect`\n\n### Passing JDBC urls\n\nNote that you cannot pass a raw JDBC url directly. With R2DBC API, the call might look like this:\n\n```java\nimport io.r2dbc.spi.ConnectionFactories;\n\nclass Main {\n    void test() {\n        // String\n        ConnectionFactories.get(\n                \"r2dbc:r2jdbc:h2~mem:///test\"\n        );\n        // ConnectionFactoryOptions is more friendly\n        ConnectionFactories.get(\n                ConnectionFactoryOptions.builder()\n                        .option(ConnectionFactoryOptions.PROTOCOL, \"r2dbc\")\n                        .option(ConnectionFactoryOptions.DATABASE, \"r2jdbc\")\n                        .option(JdbcConnectionFactoryProvider.URL, \"jdbc:h2:mem:test\")\n                        .build());\n    }\n}\n```\n\nWe accept some extra options. All are optional. \n\n\u003ctable\u003e\n\u003ctr\u003e\u003cth\u003eOption\u003c/th\u003e\u003cth\u003eExplained\u003c/th\u003e\u003c/tr\u003e\n\u003ctr\u003e\u003ctd\u003e\n\n`JdbcConnectionFactoryProvider.URL`\n\nExample: `r2dbc:r2jdbc:h2:///?j2url=jdbc:h2:mem:test`\u003c/td\u003e\n\u003ctd\u003eUsed directly as JDBC url\n\nDefault: **Infer from R2DBC url**\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\n\n`JdbcConnectionFactoryProvider.FORWARD`\n\nExample: `r2dbc:r2jdbc:h2:///test?CIPHER=AES\u0026j2forward=CIPHER`\u003c/td\u003e\n\u003ctd\u003eWhat R2DBC options to forward to JDBC (comma separated).\n\nDefault: **None**\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\n\n`JdbcConnectionFactoryProvider.CODEC`\n\nExample: `r2dbc:r2jdbc:h2:///test?j2codec=party.iroiro.r2jdbc.codecs.DefaultCodec`\u003c/td\u003e\n\u003ctd\u003eName of a class converting JDBC types into regular Java types (used by the worker).\n\nDefault: **Built-in**\u003c/td\u003e\n\u003c/tr\u003e\u003ctr\u003e\n\u003ctd\u003e\n\n`JdbcConnectionFactoryProvider.CONV`\n\n\nExample: `r2dbc:r2jdbc:h2:///test?j2conv=party.iroiro.r2jdbc.codecs.DefaultConverter`\u003c/td\u003e\n\u003ctd\u003eName of a class converting between Java types.\n\nDefault: **Built-in**\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n## License\n\nI am borrowing tests from [R2DBC H2](https://github.com/r2dbc/r2dbc-h2), which is licensed under\n[Apache License 2.0](https://github.com/r2dbc/r2dbc-h2/blob/main/LICENSE).\n\nLicensed under the [Apache License Version 2.0](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgudzpoz%2Fr2dbc-jdbc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgudzpoz%2Fr2dbc-jdbc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgudzpoz%2Fr2dbc-jdbc/lists"}