Class AbstractJdbcAgeBasedPurger

java.lang.Object
io.outbox.jdbc.purge.AbstractJdbcAgeBasedPurger
All Implemented Interfaces:
EventPurger
Direct Known Subclasses:
H2AgeBasedPurger, MySqlAgeBasedPurger, PostgresAgeBasedPurger

public abstract class AbstractJdbcAgeBasedPurger extends Object implements EventPurger
Base JDBC age-based purger that deletes all events older than a cutoff, regardless of status.

Designed for CDC (Change Data Capture) scenarios where no dispatcher or poller marks events as DONE. Events are consumed externally (e.g. via Debezium reading the WAL/binlog), so the only safe criterion for cleanup is age.

Default SQL uses a subquery-based DELETE that works for H2 and PostgreSQL. MySQL overrides with DELETE ... ORDER BY ... LIMIT.

See Also:
  • Field Details

  • Constructor Details

    • AbstractJdbcAgeBasedPurger

      protected AbstractJdbcAgeBasedPurger()
    • AbstractJdbcAgeBasedPurger

      protected AbstractJdbcAgeBasedPurger(String tableName)
  • Method Details

    • tableName

      protected String tableName()
    • purge

      public int purge(Connection conn, Instant before, int limit)
      Deletes all events older than before, up to limit rows.

      Default implementation uses a subquery to limit the batch size, which works for H2 and PostgreSQL. MySQL overrides with DELETE ... ORDER BY ... LIMIT.

      Specified by:
      purge in interface EventPurger
      Parameters:
      conn - the JDBC connection (caller controls transaction)
      before - delete events where done_at < before (or created_at < before if done_at is null)
      limit - maximum number of rows to delete in this batch
      Returns:
      the number of rows actually deleted