{"id":16035261,"url":"https://github.com/galax-io/gatling-jdbc-plugin","last_synced_at":"2026-05-31T00:01:09.011Z","repository":{"id":229449300,"uuid":"776761205","full_name":"galax-io/gatling-jdbc-plugin","owner":"galax-io","description":"Gatling plugin for JDBC — SQL queries, batch operations, and stored procedures with HikariCP connection pooling","archived":false,"fork":false,"pushed_at":"2026-05-30T22:24:49.000Z","size":172,"stargazers_count":7,"open_issues_count":7,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-05-30T23:10:59.173Z","etag":null,"topics":["gatling","gatling-plugin","hikaricp","java","jdbc","kotlin","load-testing","mysql","performance","performance-testing","postgresql","scala"],"latest_commit_sha":null,"homepage":"","language":"Scala","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/galax-io.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2024-03-24T12:21:52.000Z","updated_at":"2026-05-30T22:22:26.000Z","dependencies_parsed_at":"2026-05-15T19:01:39.239Z","dependency_job_id":null,"html_url":"https://github.com/galax-io/gatling-jdbc-plugin","commit_stats":null,"previous_names":["cosmospf/gatling-jdbc-plugin","galax-io/gatling-jdbc-plugin"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/galax-io/gatling-jdbc-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galax-io%2Fgatling-jdbc-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galax-io%2Fgatling-jdbc-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galax-io%2Fgatling-jdbc-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galax-io%2Fgatling-jdbc-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/galax-io","download_url":"https://codeload.github.com/galax-io/gatling-jdbc-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/galax-io%2Fgatling-jdbc-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33714033,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["gatling","gatling-plugin","hikaricp","java","jdbc","kotlin","load-testing","mysql","performance","performance-testing","postgresql","scala"],"created_at":"2024-10-08T22:01:32.038Z","updated_at":"2026-05-31T00:01:09.004Z","avatar_url":"https://github.com/galax-io.png","language":"Scala","funding_links":[],"categories":["Recently Updated","Tools"],"sub_categories":["[Oct 07, 2024](/content/2024/10/07/README.md)","Plugins"],"readme":"# Gatling JDBC Plugin\n\n[![CI](https://github.com/galax-io/gatling-jdbc-plugin/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/galax-io/gatling-jdbc-plugin/actions/workflows/ci.yml)\n[![Maven Central](https://img.shields.io/maven-central/v/org.galaxio/gatling-jdbc-plugin_2.13.svg?color=success)](https://search.maven.org/search?q=org.galaxio.gatling-jdbc-plugin)\n[![codecov](https://codecov.io/github/galax-io/gatling-jdbc-plugin/coverage.svg?branch=main)](https://codecov.io/github/galax-io/gatling-jdbc-plugin?branch=main)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)\n[![Scala Steward badge](https://img.shields.io/badge/Scala_Steward-helping-blue.svg?style=flat\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAQCAMAAAARSr4IAAAAVFBMVEUAAACHjojlOy5NWlrKzcYRKjGFjIbp293YycuLa3pYY2LSqql4f3pCUFTgSjNodYRmcXUsPD/NTTbjRS+2jomhgnzNc223cGvZS0HaSD0XLjbaSjElhIr+AAAAAXRSTlMAQObYZgAAAHlJREFUCNdNyosOwyAIhWHAQS1Vt7a77/3fcxxdmv0xwmckutAR1nkm4ggbyEcg/wWmlGLDAA3oL50xi6fk5ffZ3E2E3QfZDCcCN2YtbEWZt+Drc6u6rlqv7Uk0LdKqqr5rk2UCRXOk0vmQKGfc94nOJyQjouF9H/wCc9gECEYfONoAAAAASUVORK5CYII=)](https://scala-steward.org)\n\nJDBC protocol plugin for [Gatling](https://gatling.io/) load testing framework. Execute SQL queries, inserts, updates, batch operations, and stored procedures against any JDBC-compatible database with connection pooling (HikariCP) and result checks.\n\n## Table of Contents\n\n- [Compatibility](#compatibility)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Protocol Configuration](#protocol-configuration)\n- [Actions](#actions)\n- [Checks](#checks)\n- [Transactions](#transactions)\n- [Session Variables](#session-variables)\n- [Examples](#examples)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Compatibility\n\n| Plugin Version | Gatling | Scala | Java |\n|---|---|---|---|\n| 0.x.y-latest | 3.13.x | 2.13 | 17+ |\n| 0.x.y | 3.11.x | 2.13 | 17+ |\n\n\u003e **Branch strategy:** `main` targets Gatling 3.11.x, `latest/gatling` targets Gatling 3.13.x.\n\n## Installation\n\n### Scala (sbt)\n\n```scala\nlibraryDependencies += \"org.galaxio\" %% \"gatling-jdbc-plugin\" % \"\u003cversion\u003e\" % Test\n```\n\n### Java / Kotlin (Gradle Kotlin DSL)\n\n```kotlin\ngatling(\"org.galaxio:gatling-jdbc-plugin_2.13:\u003cversion\u003e\")\n```\n\n### Maven\n\n```xml\n\u003cdependency\u003e\n  \u003cgroupId\u003eorg.galaxio\u003c/groupId\u003e\n  \u003cartifactId\u003egatling-jdbc-plugin_2.13\u003c/artifactId\u003e\n  \u003cversion\u003e${version}\u003c/version\u003e\n  \u003cscope\u003etest\u003c/scope\u003e\n\u003c/dependency\u003e\n```\n\n## Quick Start\n\n### Docker (local PostgreSQL)\n\n```bash\ndocker run -d --name gatling-pg \\\n  -e POSTGRES_USER=test -e POSTGRES_PASSWORD=test -e POSTGRES_DB=test \\\n  -p 5432:5432 postgres:16\n```\n\n### Minimal Scenario — Scala\n\n```scala\nimport org.galaxio.gatling.jdbc.Predef._\nimport io.gatling.core.Predef._\n\nclass JdbcSimulation extends Simulation {\n  val dbConf = DB\n    .url(\"jdbc:postgresql://localhost:5432/test\")\n    .username(\"test\")\n    .password(\"test\")\n    .maximumPoolSize(10)\n\n  val scn = scenario(\"JDBC Query\")\n    .exec(\n      jdbc(\"select users\")\n        .query(\"SELECT * FROM users WHERE id = 1\")\n        .check(allResults.saveAs(\"rows\"))\n    )\n\n  setUp(scn.inject(atOnceUsers(1))).protocols(dbConf)\n}\n```\n\n### Minimal Scenario — Java\n\n```java\nimport static org.galaxio.gatling.jdbc.javaapi.JdbcDsl.*;\nimport static io.gatling.javaapi.core.CoreDsl.*;\n\npublic class JdbcSimulation extends Simulation {\n  var dbConf = DB()\n      .url(\"jdbc:postgresql://localhost:5432/test\")\n      .username(\"test\")\n      .password(\"test\")\n      .maximumPoolSize(10)\n      .protocolBuilder();\n\n  var scn = scenario(\"JDBC Query\")\n      .exec(\n          jdbc(\"select users\")\n              .query(\"SELECT * FROM users WHERE id = 1\")\n              .check(allResults().saveAs(\"rows\"))\n      );\n\n  { setUp(scn.injectOpen(atOnceUsers(1)).protocols(dbConf)); }\n}\n```\n\n### Minimal Scenario — Kotlin\n\n```kotlin\nimport org.galaxio.gatling.jdbc.javaapi.JdbcDsl.*\nimport io.gatling.javaapi.core.CoreDsl.*\n\nclass JdbcSimulation : Simulation() {\n  val dbConf = DB()\n      .url(\"jdbc:postgresql://localhost:5432/test\")\n      .username(\"test\")\n      .password(\"test\")\n      .maximumPoolSize(10)\n      .protocolBuilder()\n\n  val scn = scenario(\"JDBC Query\")\n      .exec(\n          jdbc(\"select users\")\n              .query(\"SELECT * FROM users WHERE id = 1\")\n              .check(allResults().saveAs(\"rows\"))\n      )\n\n  init { setUp(scn.injectOpen(atOnceUsers(1)).protocols(dbConf)) }\n}\n```\n\n## Protocol Configuration\n\n### Scala\n\n```scala\nimport org.galaxio.gatling.jdbc.Predef._\nimport scala.concurrent.duration._\n\nval dataBase = DB\n  .url(\"jdbc:postgresql://localhost:5432/test\")\n  .username(\"user\")\n  .password(\"pass\")\n  .maximumPoolSize(32)\n  .blockingPoolSize(32)\n  .queryTimeout(30.seconds)\n```\n\n### Java\n\n```java\nvar dataBase = DB()\n    .url(\"jdbc:postgresql://localhost:5432/test\")\n    .username(\"user\")\n    .password(\"pass\")\n    .maximumPoolSize(32)\n    .blockingPoolSize(32)\n    .queryTimeout(Duration.ofSeconds(30))\n    .protocolBuilder();\n```\n\n### Kotlin\n\n```kotlin\nval dataBase = DB()\n    .url(\"jdbc:postgresql://localhost:5432/test\")\n    .username(\"user\")\n    .password(\"pass\")\n    .maximumPoolSize(32)\n    .blockingPoolSize(32)\n    .queryTimeout(Duration.ofSeconds(30))\n    .protocolBuilder()\n```\n\n### Connection Pool Settings\n\n| Setting | Default | Description |\n|---------|---------|-------------|\n| `maximumPoolSize` | 10 | Max connections in HikariCP pool |\n| `minimumIdleConnections` | 10 | Min idle connections |\n| `blockingPoolSize` | = `maximumPoolSize` | Fixed thread pool for blocking JDBC calls |\n| `connectionTimeout` | 1 minute | Connection acquisition timeout |\n| `queryTimeout` | None | Statement query timeout (per query) |\n\nJDBC calls are blocking, so the plugin runs them on a dedicated executor. `blockingPoolSize` defaults to `maximumPoolSize` to prevent unbounded native thread growth.\n\n### Custom HikariConfig\n\n```scala\nval hikariConfig = new HikariConfig()\nhikariConfig.setJdbcUrl(\"jdbc:postgresql://localhost:5432/test\")\nhikariConfig.setMaximumPoolSize(16)\n\nval dataBase = DB.hikariConfig(hikariConfig)\n```\n\n## Actions\n\n### Query\n\n```scala\njdbc(\"select users\")\n  .query(\"SELECT * FROM users WHERE status = 'active'\")\n  .check(allResults.saveAs(\"rows\"))\n```\n\n### Parameterized Query\n\n```scala\njdbc(\"find user\")\n  .queryP(\"SELECT * FROM users WHERE id = {id} AND status = {status}\")\n  .params(\"id\" -\u003e \"#{userId}\", \"status\" -\u003e \"active\")\n```\n\n### Insert\n\n```scala\njdbc(\"insert user\")\n  .insertInto(\"users\", \"id\", \"name\", \"email\")\n  .values(Map(\"id\" -\u003e 1, \"name\" -\u003e \"#{userName}\", \"email\" -\u003e \"#{email}\"))\n```\n\n### Transaction\n\nExecute multiple SQL statements atomically (auto-rollback on failure):\n\n```scala\njdbc(\"transfer funds\").transaction(\n  \"UPDATE accounts SET balance = balance - 100 WHERE id = 1\",\n  \"UPDATE accounts SET balance = balance + 100 WHERE id = 2\",\n  \"INSERT INTO audit_log (action) VALUES ('transfer')\",\n)\n```\n\n## Checks\n\n| Check | Description |\n|-------|-------------|\n| `allResults` / `allResults()` | Full result set |\n| `row(index)` | Single row by zero-based index |\n| `column(name)` | All values from a column |\n| `cell(name, rowIndex)` | Single value at column + row |\n| `simpleCheck(predicate)` | Custom boolean predicate |\n\n### Scala\n\n```scala\njdbc(\"select users\")\n  .query(\"SELECT ID AS USER_ID, NAME FROM USERS ORDER BY ID\")\n  .check(\n    cell(\"NAME\", 0).is(\"Alice\"),\n    row(0).saveAs(\"firstRow\"),\n    column(\"USER_ID\").saveAs(\"userIds\"),\n    allResults.saveAs(\"rows\"),\n  )\n```\n\n### Java\n\n```java\njdbc(\"select users\")\n    .query(\"SELECT ID AS USER_ID, NAME FROM USERS ORDER BY ID\")\n    .check(\n        cell(\"NAME\", 0).saveAs(\"firstName\"),\n        row(0).saveAs(\"firstRow\"),\n        column(\"USER_ID\").saveAs(\"userIds\"),\n        allResults().saveAs(\"rows\")\n    );\n```\n\n## Session Variables\n\nThe plugin supports [Gatling Expression Language (EL)](https://docs.gatling.io/reference/script/core/session/el/) in SQL queries. Use `#{variableName}` to reference session values.\n\n### query() with EL\n\n```scala\nexec(session =\u003e session.set(\"tableName\", \"USERS\"))\n.exec(jdbc(\"dynamic query\").query(\"SELECT * FROM #{tableName} WHERE id = #{id}\"))\n```\n\n### queryP() — Prepared Statements\n\n- `{param}` in SQL — prepared statement placeholder (replaced with `?`)\n- `\"#{var}\"` in `.params()` — Gatling EL, resolves from session at runtime\n\n```scala\njdbc(\"parameterized query\")\n  .queryP(\"SELECT * FROM users WHERE id = {id}\")\n  .params(\"id\" -\u003e \"#{userId}\")\n```\n\n### Java/Kotlin Typed Values\n\n```java\njdbc(\"insert user\")\n    .insertInto(\"USERS\", \"id\", \"name\", \"active\")\n    .values(Map.of(\n        \"id\", 1,\n        \"name\", \"#{userName}\",\n        \"active\", true\n    ));\n```\n\n## Transactions\n\nExecute multiple SQL statements atomically:\n\n```scala\njdbc(\"transfer funds\").transaction(\n  \"UPDATE accounts SET balance = balance - 100 WHERE id = 1\",\n  \"UPDATE accounts SET balance = balance + 100 WHERE id = 2\",\n)\n```\n\nIf any statement fails, the entire transaction is rolled back. Gatling EL expressions are supported.\n\n## Examples\n\n- [Scala](src/test/scala/org/galaxio/performance/jdbc/test)\n- [Java](src/test/java/org/galaxio/performance/jdbc/test)\n- [Kotlin](src/test/kotlin/org/galaxio/performance/jdbc/test)\n\n## Contributing\n\n```bash\n# Build\nsbt compile\n\n# Run unit tests\nsbt test\n\n# Run integration tests (requires Docker)\nsbt \"Test / testOnly -- -n org.galaxio.gatling.jdbc.tags.DockerTest\"\n\n# Run Gatling example simulation (H2)\nsbt \"Gatling / testOnly org.galaxio.performance.jdbc.test.DebugTest\"\n\n# Check formatting\nsbt scalafmtCheckAll\n\n# Format code\nsbt scalafmtAll\n```\n\n## License\n\nApache License 2.0. See [LICENSE](LICENSE) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgalax-io%2Fgatling-jdbc-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgalax-io%2Fgatling-jdbc-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgalax-io%2Fgatling-jdbc-plugin/lists"}