{"id":16179382,"url":"https://github.com/valb3r/springbatch-neo4j-adapter","last_synced_at":"2025-07-13T05:34:28.540Z","repository":{"id":114029412,"uuid":"237763471","full_name":"valb3r/springbatch-neo4j-adapter","owner":"valb3r","description":"Neo4j persistence layer adapter for Spring Batch. Allows Spring Batch to run directly on the Neo4j database by providing JobRepository persistence adapter.","archived":false,"fork":false,"pushed_at":"2020-10-08T10:34:14.000Z","size":231,"stargazers_count":4,"open_issues_count":7,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T21:08:07.392Z","etag":null,"topics":["java","neo4j","persistence-layer","spring-batch","spring-batch-neo4j","spring-data-neo4j"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/valb3r.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":"2020-02-02T11:51:46.000Z","updated_at":"2023-02-13T13:58:30.000Z","dependencies_parsed_at":"2023-05-18T04:30:53.942Z","dependency_job_id":null,"html_url":"https://github.com/valb3r/springbatch-neo4j-adapter","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/valb3r/springbatch-neo4j-adapter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valb3r%2Fspringbatch-neo4j-adapter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valb3r%2Fspringbatch-neo4j-adapter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valb3r%2Fspringbatch-neo4j-adapter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valb3r%2Fspringbatch-neo4j-adapter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/valb3r","download_url":"https://codeload.github.com/valb3r/springbatch-neo4j-adapter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/valb3r%2Fspringbatch-neo4j-adapter/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265094833,"owners_count":23710556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["java","neo4j","persistence-layer","spring-batch","spring-batch-neo4j","spring-data-neo4j"],"created_at":"2024-10-10T05:27:37.307Z","updated_at":"2025-07-13T05:34:28.516Z","avatar_url":"https://github.com/valb3r.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Java CI](https://github.com/valb3r/springbatch-neo4j-adapter/workflows/Java%20CI/badge.svg?branch=master)\n[![codecov](https://codecov.io/gh/valb3r/springbatch-neo4j-adapter/branch/master/graph/badge.svg)](https://codecov.io/gh/valb3r/springbatch-neo4j-adapter)\n[ ![Download](https://api.bintray.com/packages/valb3r/maven/neo4j-adapter/images/download.svg?version=0.1.4) ](https://bintray.com/valb3r/maven/neo4j-adapter/0.1.4/link)\n\n# Description\n\nProvides Spring-batch **JobRepository** and related metadata persistence in Neo4J.\n\n# Purpose\n\nCurrently, the support of NoSQL databases in Spring-Batch is limited to ItemReader/ItemWriter for Neo4j and Mongo.\nThis means that to persist state of Spring-Batch job you would need to have an RDMBS database even if you don't need it as there is no `JobRepository` persistence adapter available.\nSee these open tickets:\n\n - https://github.com/spring-projects/spring-batch/issues/877\n - https://github.com/spring-projects/spring-batch/issues/1988\n\nThis project aims to solve this problem for Neo4j. It offers ready to use Spring Batch metadata persistence adapter \nfor the Neo4j database. This adapter allows Spring Batch to store its metadata directly in Neo4j so that \nno RDBMS/SQL database is needed. It is built on top of Spring-Data for entity and repository abstraction and on top of MapStruct to map Spring Batch data structures to Spring-Data Neo4j entities. This way, the amount of boilerplate code to write was kept at the minimum level.\n\n# Importing it to your project\n\n## Gradle\n\n```groovy\nrepositories {\n    jcenter()\n}\n\ndependencies {\n    implementation 'com.github.valb3r.springbatch.adapters:neo4j-adapter:0.1.4'\n}\n```\n\n## Maven\n\nAdd `jcenter` repository:\n\n```\n\u003crepositories\u003e\n    \u003crepository\u003e\n        \u003csnapshots\u003e\n            \u003cenabled\u003efalse\u003c/enabled\u003e\n        \u003c/snapshots\u003e\n        \u003cid\u003ejcenter\u003c/id\u003e\n        \u003cname\u003ebintray\u003c/name\u003e\n        \u003curl\u003ehttps://jcenter.bintray.com\u003c/url\u003e\n    \u003c/repository\u003e\n\u003c/repositories\u003e\n```\n\nImport `neo4j-adapter`:\n```\n \u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.valb3r.springbatch.adapters\u003c/groupId\u003e\n    \u003cartifactId\u003eneo4j-adapter\u003c/artifactId\u003e\n    \u003cversion\u003e0.1.4\u003c/version\u003e\n\u003c/dependency\u003e\n\n```\n\n# Artifacts repository:\n\nSee `Bintray` repository: [https://bintray.com/valb3r/maven/neo4j-adapter](https://bintray.com/valb3r/maven/neo4j-adapter).\n\n# Spring-Batch DB structure on Neo4j\n\n![DB structure](docs/db_structure.png)\n\n# Examples\n\nAll examples can be found inside [examples](examples) folder.\n\n## Configuring \n\nThis is the example of how to enable Spring-Batch Neo4j adapter\n\n[Example:Enable Neo4j adapter](examples/src/main/java/com/github/valb3r/springbatch/adapters/examples/neo4j/ExampleApplication.java#L10-L26)\n```groovy\n@EnableBatchProcessing\n@SpringBootApplication(\n    // Spring-Batch includes this by default, disabling them\n    exclude = {\n        DataSourceAutoConfiguration.class,\n        DataSourceTransactionManagerAutoConfiguration.class\n    }\n)\n@EnableSpringBatchNeo4jAdapter\npublic class ExampleApplication {\n\n    public static void main(String[] args) {\n        SpringApplication.run(ExampleApplication.class);\n    }\n}\n```\n\nAfter you have enabled Neo4j adapter with `@EnableSpringBatchNeo4jAdapter` you can use Spring-Batch as if it was \nRDBMS database. See this snippet for example:\n\n[Example:Execute simple batch job](examples/src/main/java/com/github/valb3r/springbatch/adapters/examples/neo4j/SimpleJobService.java#L16-L47)\n```groovy\n@Slf4j\n@Service\n@RequiredArgsConstructor\npublic class SimpleJobService {\n\n    @Getter\n    private final AtomicReference\u003cString\u003e result = new AtomicReference\u003c\u003e();\n\n    private final JobRepository jobRepository;\n    private final JobBuilderFactory jobBuilderFactory;\n    private final StepBuilderFactory stepBuilderFactory;\n\n    @SneakyThrows\n    public void runSimpleJob() {\n        val job = jobBuilderFactory.get(\"FOO\")\n            .start(stepBuilderFactory.get(\"ONE\").tasklet((a, b) -\u003e {\n                log.info(\"STEP ONE!\");\n                return null;\n            }).build())\n            .next(stepBuilderFactory.get(\"TWO\").tasklet((a, b) -\u003e {\n                log.info(\"STEP TWO!\");\n                result.set(\"Step TWO DONE\");\n                return null;\n            }).build())\n            .build();\n\n        val exec = jobRepository.createJobExecution(\"Test one\", new JobParameters());\n        job.execute(exec);\n    }\n}\n```\n\n## Used by\n\nYou can see how to configure the adapter and how to use it in 'real' project here:\n - https://github.com/valb3r/time-tracker/ in particular [worker](https://github.com/valb3r/time-tracker/tree/master/worker) submodule.\n\n## Connection configuration\n\nThe adapter will reuse `spring.data.neo4j` database connection properties if you provide them in \ni.e. `application.yml`. \nFor example:\n\n```\nspring:\n  # Run neo4j with docker:\n  # docker run --rm -d --publish=7474:7474 --publish=7687:7687 --volume=$HOME/neo4j/data:/data -e NEO4J_AUTH=neo4j/docker neo4j/neo4j-experimental:4.0.0-rc01\n  data:\n    neo4j:\n      uri: bolt://localhost:7687\n      username: neo4j\n      password: docker\n      open-in-view: false\n      use-native-types: true\n```\n\nAll repositories are provided by:\n```\n@EnableNeo4jRepositories(\n    basePackages = {\n        \"com.github.valb3r.springbatch.adapters.neo4j.ogm.repository\"\n    }\n)\n```\n\nThis way, all of them are configured using the same Spring-Data configuration as you have for your own\nNeo4j-repositories.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalb3r%2Fspringbatch-neo4j-adapter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalb3r%2Fspringbatch-neo4j-adapter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalb3r%2Fspringbatch-neo4j-adapter/lists"}