Changelog¶
All notable changes to api-log-spring-boot-starter are documented here.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
Unreleased¶
0.3.0 — BUILTIN schema management is the new default¶
Changed¶
- BUILTIN is now the default schema management strategy. v0.2.0 made schema management opt-in with
NONEas the default, but that left users without Flyway/Liquibase staring at a "table doesn't exist" error on first boot. v0.3.0 flips the default toBUILTIN— the starter runsCREATE TABLE IF NOT EXISTSautomatically via Spring Boot'sDataSourceScriptDatabaseInitializer, so the table just exists. V1.0__create_api_log.sqlnow usesIF NOT EXISTSclauses, making it idempotent and safe to re-run on every boot. Flyway is fine with this; the version row inflyway_schema_historyis what matters, not whether the SQL did anything.
Strategy summary (after v0.3.0)¶
api.log.schema.management=builtin(default) — starter creates the table on startupapi.log.schema.management=flyway— starter registers aFlywayConfigurationCustomizer(requires Flyway on classpath)api.log.schema.management=none— starter does not touch the schema; you apply the DDL yourself
Migration from v0.2.0¶
- You had
management=flywayset explicitly: no change needed. - You had
management=noneset explicitly: no change needed. - You did not set
management(relying on the v0.2.0 defaultNONEand applying the DDL elsewhere): either setmanagement=noneexplicitly to preserve old behavior, or let BUILTIN take over (it's idempotent, so it won't fight your existing table).
0.2.0 — Schema management opt-in¶
Changed¶
- BREAKING: schema management is now opt-in. v0.1.0 force-installed Flyway and auto-ran the bundled migration. v0.2.0 makes the consumer choose:
api.log.schema.management=none(default) — apply the DDL yourself (Liquibase, manualpsql, your own Flyway flow)api.log.schema.management=flyway— starter registers aFlywayConfigurationCustomizerthat adds its location to your Flyway setup
flyway-coreandflyway-database-postgresqlare now<optional>true</optional>— consumers who wantmanagement=flywaymust declare Flyway in their own build.- Migration relocated from
classpath:db/migration/V1.0__create_api_log.sqltoclasspath:db/api-log/V1.0__create_api_log.sqlso it no longer collides with the consumer's default Flyway location.
Migration guide (from v0.1.0)¶
If you were depending on v0.1.0's auto-migration:
- Add
org.flywaydb:flyway-core(andflyway-database-postgresqlruntime) to your dependencies. - Set
api.log.schema.management=flywayin your config.
If you'd rather apply the schema yourself (recommended for production):
- Copy the SQL from Schema reference into your migration tool of choice.
- Leave
api.log.schema.managementat its default (none).
0.1.0 — Initial release¶
First public release. Repackaged as a standalone Spring Boot starter.
Changed¶
- Restructured as standalone Spring Boot Starter library.
groupId:com.devs.lab→kr.devslabartifactId:api-log-starter→api-log-spring-boot-starter- Java package:
com.devs.lab.test.*→kr.devslab.apilog.*
- Removed demo application (
ApiLogApplication,compose.yaml,Dockerfile.postgres) — pure library. - Removed app-only dependencies:
spring-boot-devtools,spring-boot-docker-compose,spring-boot-starter-actuator. - Removed
spring-boot-maven-pluginfrom build (library, not executable jar).
Fixed¶
- Flyway migration path:
db.migration/→db/migration/(the dot version wasn't a standard Flyway location and never auto-applied).
Added¶
LICENSE(Apache 2.0) +NOTICE.- Full
pom.xmlmetadata (licenses, SCM, developers, organization) required for Maven Central publishing. - Bilingual README (English default +
README.ko.md). - This documentation site.
Highlights¶
- Async, event-driven API call logging via
ApplicationEventPublisher. RestApiClientUtilbundled HTTP client withGET/POST×sync/async×raw/typed.- PostgreSQL JSONB storage for request/response/error bodies.
- Spring Retry integration with
RETRY_ERRORevents. - Auto-configuration via
ApiLogAutoConfigurationwith@ConditionalOnMissingBeanoverrides. - 31 tests including PostgreSQL integration via Testcontainers.