Skip to content
CAI
Software that uses CAICheck a score

raedbh/spring-outbox

57.5

Adequate · 21 September 2026

5.5k

lines of production code

Java

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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

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

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.