raedbh/spring-outbox
57.5
Adequate · 21 September 2026
5.5k
lines of production code
Java
primary language
4
measurements over time
What this system is
This system is a Spring-based library implementing the Outbox pattern to ensure reliable event streaming from databases to message brokers. It supports MySQL, PostgreSQL, and MongoDB as data sources, automatically capturing change data via Debezium and publishing events to Kafka or RabbitMQ. The framework provides auto-configuration for both producing outbox messages and consuming them, simplifying the integration of transactional consistency with asynchronous messaging.
How it got here
2024 — Debezium connector refactoring and simplification
12 changes.
The project refactored the Debezium connectors to remove the Apache Camel dependency in favor of a standalone Spring Boot auto-configuration, while simplifying the core outbox data model by removing the 'related\_to' field and standardizing transaction handling. Configuration prefixes were renamed, and default connection settings were removed from connector modules to enforce explicit user configuration. The period also included upgrading dependencies to Spring Boot 3.5.8 and Debezium 3.1.3, alongside updates to sample applications and test suites to reflect these architectural changes.
2025 — MongoDB support and connector expansion
12 changes.
This period focused on extending the library's database and messaging capabilities by adding full support for MongoDB outbox storage and Debezium connectors. It also introduced new Spring Boot auto-configurations and entry points for MySQL, PostgreSQL, and Kafka integrations, while refactoring the core API and test infrastructure to support these broader combinations.
Features
Add Kafka integration for outbox message publishing
This change introduces a new Kafka connector for the Spring Outbox Debezium library, enabling outbox messages to be published directly to Apache Kafka topics. The implementation includes an auto-configuration that registers a \KafkaOutboxMessageProducer\ when \KafkaTemplate\ is present, allowing users to configure target topics, partitions, and keys via properties (e.g., \spring.outbox.connector.kafka.messages.\<type\>.topic\). The producer sends outbox payloads as Kafka records and includes metadata—specifically the \outbox\_id\—as message headers. Default serializers for keys (String) and values (ByteArray) are also configured.
spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-kafka · high confidence
Add Kafka support for consuming outbox messages
The spring-outbox-kafka module now provides auto-configuration for consuming outbox events from Kafka. This includes an auto-configuration class that sets up a dedicated Kafka listener container factory with specific deserializers (String for keys, ByteArray for values) and a message converter that maps outbox-specific headers (entity type, ID, occurred at, operation). Additionally, a listener configuration registers a custom method argument resolver to handle outbox message deserialization within @KafkaListener methods, enabling seamless integration with Spring Kafka.
spring-outbox-kafka · high confidence
Add MongoDB Outbox Connector support
Users can now use the outbox pattern with MongoDB databases. This change introduces a new Spring Boot auto-configuration module that registers a Debezium MongoDB connector, automatically wiring connection details, offset storage, and topic prefixes from the application's outbox properties. It also includes default application configuration to disable the Spring banner and expose health and metrics endpoints for monitoring the connector's status.
spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-mongo · high confidence
Add MongoDB outbox connector support and refactor test infrastructure
This change introduces new Spring Boot application entry points for MongoDB-based outbox connectors, specifically adding MongoKafkaConnector and MongoRabbitConnector to enable event streaming from MongoDB to Kafka and RabbitMQ respectively. To support these new connectors, the integration test infrastructure has been refactored: common test configurations now provision RabbitMQ and Kafka containers via Testcontainers, and the shared TestUtils class has been updated to include environment variable constants and connection parameter maps for PostgreSQL, MySQL, and RabbitMQ, facilitating broader database and messaging system support in integration tests.
spring-outbox-debezium-connectors/spring-outbox-debezium-connector-mongo-kafka, spring-outbox-debezium-connectors/spring-outbox-debezium-connector-mongo-rabbit, spring-outbox-integration-tests/spring-outbox-integration-tests-common · high confidence
Add Spring Boot application entry points for MySQL and Postgres Kafka connectors
Introduced the main application classes for the MySQL and Postgres Kafka connector modules. These new files, MysqlKafkaConnector.java and PostgresKafkaConnector.java, serve as the Spring Boot entry points for their respective modules, enabling the applications to be launched directly. This change establishes the executable structure for the Kafka integration components.
spring-outbox-debezium-connectors/spring-outbox-debezium-connector-mysql-kafka, spring-outbox-debezium-connectors/spring-outbox-debezium-connector-postgres-kafka · high confidence
Add Spring Boot auto-configuration for MySQL and PostgreSQL Debezium connectors
This change introduces dedicated Spring Boot auto-configuration modules for MySQL and PostgreSQL, enabling automatic setup of Debezium connectors for outbox pattern event streaming. For MySQL, the new \MysqlConnectorConfiguration\ registers a Debezium MySQL connector bean, configuring connection details (hostname, port 3306, credentials), database/table inclusion lists for the \outbox\ table, and file-based storage for offsets and schema history. Similarly, the PostgreSQL module provides \PostgresConnectorConfiguration\ with analogous settings for the PostgreSQL connector (port 5432, schema/table inclusion). Both modules include Spring Boot \AutoConfiguration.imports\ files to enable auto-configuration and standard \application.yml\ files disabling the banner and exposing health/metrics endpoints. Users can now integrate Debezium CDC for these databases by simply adding the respective starter dependencies, with configuration driven by \OutboxConnectorProperties\.
spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-mysql, spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-postgres · high confidence
Added project documentation, IDE formatting profiles, and release automation scripts
This change introduces several new files to the \etc\ directory to support development and release workflows. It adds \docs.adoc\ and \spring-outbox-blog-post.md\ to provide project documentation and a blog post source. It also includes \ide/eclipse-formatter.xml\ and \ide/intellij-formatter.xml\ to standardize code formatting for Eclipse and IntelliJ IDEA users. Additionally, it adds \release-artifacts.sh\ and \release-connectors.sh\ to automate the Maven deployment of core modules and the Docker image build/push for Debezium connectors, respectively, while moving \settings.xml\ into the \etc\ directory.
etc · high confidence
MongoDB outbox implementation with ObjectId identifiers
This module adds a MongoDB-backed outbox repository, allowing applications to persist outbox entries in a MongoDB database. The implementation uses Spring Data MongoDB, storing entries in an 'outbox' collection with \ObjectId\ identifiers. It includes auto-configuration for the \MongoTransactionManager\ and a custom \OutboxMongoRepositoryFactoryBean\ that integrates the outbox pattern with Spring Data repositories, ensuring that state changes on root entities trigger the creation of outbox entries.
spring-outbox-mongo · high confidence
Behavioural changes
API module refactoring and MongoDB outbox support
The \spring-outbox-debezium-connectors-api\ module has been restructured to support MongoDB outbox entries alongside existing Kafka Connect Structs. The \OutboxDataMapper\ now parses MongoDB \BsonDocument\ records, extracting the \\_id\ as the message identifier (GH-39) and mapping payload and metadata fields. The \OutboxData\ model was updated to include a constant for the \outbox\_id\ header (GH-19) and stricter validation for empty types and payloads. Additionally, core classes like \JacksonMapperProvider\, \OutboxData\, and \OutboxMessageProducer\ were moved from the \core\ sub-package to the main API package, and the \OutboxMessageProducer.produceMessage\ method signature was simplified to remove the checked exception.
spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-api · high confidence
Core outbox connector refactored from Apache Camel to a standalone Spring Boot auto-configuration
The core module has been restructured to remove the Apache Camel dependency, replacing the previous Camel-based route builder with a new Spring Boot auto-configuration that registers a standalone \OutboxDebeziumEngine\. This engine captures database change events via Debezium and directly produces outbox messages, configurable through \spring.outbox.connector\ properties. The change also removes the \related\_to\ field from the \OutboxData\ mapping, as it lacked a concrete use case, and adds unit tests to verify the new engine's behavior for various database operations.
spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-core · high confidence
Proposal awarding now triggers email notifications to vendors
When a proposal is awarded, the system now sends an email notification to the winning vendor. This is implemented by introducing an \EmailNotification\ model and updating the \ProposalAwarded\ event to carry this command. The \ProposalController\ now retrieves the vendor's contact details when awarding a proposal, and the \Proposals\ repository passes this information to the event, ensuring the notification is included in the outbox.
spring-outbox-sample/s2p-app · high confidence
RabbitMQ connector refactors to use RabbitOperations and standardizes message headers
The RabbitMQ outbox connector has been refactored to use the more generic \RabbitOperations\ interface instead of \RabbitTemplate\, improving flexibility in how the underlying AMQP client is configured. Configuration classes have been renamed (e.g., \RabbitConfig\ to \RabbitMessageConfig\) and the provider now extends a common abstract base class for better consistency. Additionally, the message producer now explicitly includes the outbox ID in the message headers, ensuring that every published message carries its unique identifier for traceability.
spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-rabbit/src/main · high confidence
Refactor outbox core transaction handling and metadata constants
The outbox core module now uses a pre-configured TransactionTemplate instead of manually managing PlatformTransactionManager, simplifying transaction control in OutboxManager. The PredefinedMetadataKeys class has been renamed to OutboxHeaders to better reflect its purpose as message header constants. OutboxEntry no longer requires an explicit Identifier; IDs are now generated internally via UUID, and the relatedTo field has been removed, simplifying the entry structure. Additionally, the SerializableTargetConverterRegistry has been refactored to use Spring's ResolvableType for more robust converter detection in complex inheritance hierarchies.
spring-outbox-core · high confidence
Relational outbox configuration renamed and related-to field removed
The Spring Boot configuration prefix for the relational outbox has been renamed from 'spring.outbox.rdbms' to 'spring.outbox.relational', requiring users to update their application properties. Additionally, the 'related\_to' field has been removed from the outbox table schema and the JPA entity, simplifying the data model by eliminating the ability to link outbox entries to a specific root entity instance. The auto-creation of the outbox table now also triggers when Hibernate's DDL auto mode is set to 'create', not just 'create-drop'.
spring-outbox-jpa/src/main · high confidence
Relational outbox integration tests now use 'relational' config prefix and support MySQL/PostgreSQL with Kafka/RabbitMQ
The relational integration test module has been restructured to support multiple database and message-broker combinations. Configuration properties now use the 'spring.outbox.relational' prefix (e.g., 'spring.outbox.relational.auto-create') instead of the previous 'spring.outbox.rdbms' prefix. The sample application logic has been updated to include a Shopify integration listener that processes order payment events via either Kafka or RabbitMQ, depending on the active profile. Integration tests are now provided for MySQL and PostgreSQL databases, each tested against both Kafka and RabbitMQ message brokers using Testcontainers, ensuring the outbox pattern works correctly across these relational and messaging combinations.
spring-outbox-integration-tests/spring-outbox-integration-tests-relational · high confidence
Removal of default configuration and code formatting in MySQL and Postgres RabbitMQ connectors
The default \application.yml\ configuration files have been removed from both the MySQL and Postgres RabbitMQ connector modules. This eliminates the pre-configured Camel Debezium component URIs and database connection settings (such as hostname, port, and credentials) that were previously embedded in the resources. Users must now provide their own configuration for these connection parameters. Additionally, minor whitespace formatting has been applied to the Java entry-point classes for both connectors.
spring-outbox-debezium-connectors/spring-outbox-debezium-connector-mysql-rabbit, spring-outbox-debezium-connectors/spring-outbox-debezium-connector-postgres-rabbit · high confidence
Spring Outbox sample: Windows support, documentation, and configuration updates
The sample now includes a Windows batch script (scenario.bat) to run the end-to-end procurement scenario on Windows, alongside a comprehensive README explaining the Source-to-Pay architecture, endpoints, and setup steps. The Docker Compose configuration has been updated to use MySQL 8.3 and RabbitMQ 4.0.5, corrected the build path for the Debezium connector, and fixed missing RabbitMQ credentials (username/password) in the connector environment. Additionally, the test application properties file has been removed.
spring-outbox-sample · high confidence
Fixes
Refactor sample into separate email service module and fix outbox messaging design
The sample application is restructured by extracting the email service into its own Maven module with shared message contracts, including a new \EmailNotificationHandler\ and \EmailSender\ that consume from a durable 'emails' RabbitMQ queue. In the core library, the messaging infrastructure is refactored to fix a design flaw: the \@MessageWith\ annotation is replaced by \@OutboxMessageBody\ to identify message bodies, and the \OutboxMethodArgumentResolver\ is updated to support \Optional\ parameter types and correctly resolve payloads based on the new \OutboxHeaders.OPERATION\ header, with auto-configuration now provided via \OutboxMessagingConfiguration\.
spring-outbox-messaging, spring-outbox-sample/email-service/email-message-contracts, spring-outbox-sample/email-service/email-service-app · high confidence
Test coverage
MongoDB outbox integration tests with Kafka and RabbitMQ support; Removed MySQL and PostgreSQL integration tests with RabbitMQ; Update outbox configuration property names and refresh test suite; Updated tests for RabbitMQ outbox connector configuration and message production.
Dependencies
Spring Outbox upgraded to Spring Boot 3.5.8 and Debezium 3.1.3 with new connector modules
The project has been upgraded to Spring Boot 3.5.8 (and Spring Framework 6.2.11) and Debezium 3.1.3.Final, replacing the previous Apache Camel-based Debezium integration with a native Kafka Connect API approach. This change introduces new Maven modules for Debezium connectors targeting MySQL, PostgreSQL, and MongoDB, with specific support for both RabbitMQ and Kafka message brokers. The build also updates the maven-compiler-plugin to 3.14.0 and explicitly manages MongoDB driver 5.2.0 dependencies to ensure compatibility with the newer Spring Boot BOM.
(dependencies) · high confidence
Housekeeping
Formatting and copyright year update in RabbitMQ outbox configuration
This change applies code formatting adjustments and updates the copyright year range to 2024-2025 within the Spring Outbox RabbitMQ auto-configuration module. The functional behavior of the \OutboxRabbitAutoConfiguration\ remains unchanged, continuing to register the \OutboxMethodArgumentResolver\ for consuming outbox messages from RabbitMQ.
spring-outbox-rabbit · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 58.
Lenses
- Code Health 99
- Architecture 92
- Maturity 60
- Readiness 36
- Security 95
Changes since last survey
- 83 commits — 79 feature/other, 4 fixes
By area
- (root) — 29 commits
- spring-outbox-sample/pom.xml — 9 commits
- spring-outbox-debezium-connectors/pom.xml — 4 commits
- spring-outbox-jpa/src — 4 commits
- spring-outbox-sample/compose.yaml — 4 commits
- spring-outbox-rabbit/src — 3 commits
- spring-outbox-sample/src — 3 commits
- etc/spring-outbox-blog-post.md — 2 commits
- spring-outbox-core/src — 2 commits
- spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-core — 2 commits
- spring-outbox-mongo/src — 2 commits
- spring-outbox-sample/README.adoc — 2 commits
- spring-outbox-sample/email-service — 2 commits
- spring-outbox-sample/s2p-app — 2 commits
- etc/ide — 1 commit
- etc/release-artifacts.sh — 1 commit
- etc/release-connectors.sh — 1 commit
- spring-outbox-debezium-connectors/spring-outbox-debezium-connector-mysql-kafka — 1 commit
- spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-api — 1 commit
- spring-outbox-debezium-connectors/spring-outbox-debezium-connectors-kafka — 1 commit
Notable commits
- fix: GH-22 - Sample: fix the location of the connector Dockerfile.
- fix: GH-52 - Fix missing Rabbit MQ credentials in debezium-connector configuration.
- fix: GH-54 - Fix: SerializableTargetConverterRegistry fails to detect Converter interface in complex inheritance hierarchies.
- fix: GH-55 - Refactor sample by introducing email service as separate maven module with shared message contracts and fix core design flaw.
- change: GH-1 - Format.
- change: GH-1 - Initial commit.
- change: GH-11 - Format.
- change: GH-12 - Schema Initialization: drop outbox table for 'ddl-auto=create'.
- change: GH-13 - Sample: Upgrade to Byte Buddy v1.15.11
- change: GH-14 - Formatting.
- change: GH-14 - Rename @MessageWith to @OutboxMessageBody and Make 'operation' Optional.
- change: GH-15 - OutboxMessageBody: support Optional.
- change: GH-16 - Add sample README.
- change: GH-17 - Bump version to 0.2.0
- change: GH-17 - Prepare next development iteration 0.3.0-SNAPSHOT.
- change: GH-19 - Add outbox_id to message headers.
- change: GH-20 - Add dedicated release script excluding connectors from being published to Maven Central.
- change: GH-20 - Add release script for connectors Docker Images.
- change: GH-20 - Format.
- change: GH-20 - README: remove java jar instructions in favor of docker.
- …and 63 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
raedbh/spring-outbox was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 8a96294f3fd92d6c94c256c16cc83e92476c0da1 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.