# Happy path: 4 shard files, gridSize 4, pool size 4 -- 20,000 rows $ java -jar target/spring-batch-partitioning-1.0.0.jar \ --partition.shards-dir=./data/shards-small --partition.grid-size=4 \ --partition.pool-core-size=4 --partition.pool-max-size=4 2026-09-14T09:29:56.758Z INFO 4937 --- [ main] c.a.b.PartitioningDemoApplication : Started PartitioningDemoApplication in 3.563 seconds (process running for 4.114) 2026-09-14T09:29:56.876Z INFO 4937 --- [ main] o.s.batch.core.step.AbstractStep : Executing step: [ordersManagerStep] 2026-09-14T09:29:56.892Z INFO 4937 --- [der-partition-2] o.s.batch.core.step.AbstractStep : Executing step: [ordersWorkerStep:partition0] 2026-09-14T09:29:56.890Z INFO 4937 --- [der-partition-1] o.s.batch.core.step.AbstractStep : Executing step: [ordersWorkerStep:partition1] 2026-09-14T09:29:56.900Z INFO 4937 --- [der-partition-4] o.s.batch.core.step.AbstractStep : Executing step: [ordersWorkerStep:partition2] 2026-09-14T09:29:56.901Z INFO 4937 --- [der-partition-3] o.s.batch.core.step.AbstractStep : Executing step: [ordersWorkerStep:partition3] 2026-09-14T09:29:57.962Z INFO 4937 --- [der-partition-2] o.s.batch.core.step.AbstractStep : Step: [ordersWorkerStep:partition0] executed in 1s70ms 2026-09-14T09:29:57.963Z INFO 4937 --- [der-partition-4] o.s.batch.core.step.AbstractStep : Step: [ordersWorkerStep:partition2] executed in 1s64ms 2026-09-14T09:29:57.990Z INFO 4937 --- [der-partition-1] o.s.batch.core.step.AbstractStep : Step: [ordersWorkerStep:partition1] executed in 1s99ms 2026-09-14T09:29:57.998Z INFO 4937 --- [der-partition-3] o.s.batch.core.step.AbstractStep : Step: [ordersWorkerStep:partition3] executed in 1s98ms 2026-09-14T09:29:58.005Z INFO 4937 --- [ main] o.s.batch.core.step.AbstractStep : Step: [ordersManagerStep] executed in 1s130ms 2026-09-14T09:29:58.011Z INFO 4937 --- [ main] o.s.batch.core.step.AbstractStep : Executing step: [reportStep] REPORT: 20000 orders scored, 1561 flagged high-risk JOB FINISHED: id=1 status=COMPLETED exitCode=COMPLETED All four partitions start within a few milliseconds of each other, on four distinct named threads (order-partition-1..4) -- this is what "partitioned" actually looks like at the OS level, not just in configuration. 1,561 of 20,000 orders (7.8%) came back flagged high-risk, matching the expected rate from the threshold math in docs/06-why-cpu-bound-not-io-bound.md. --- GET /batch/partitions/1 (the diagnostic endpoint -- delete before shipping) --- [ { "PARTITION_NAME": "ordersWorkerStep:partition0", "THREAD_NAME": "order-partition-2", "READ_COUNT": 5000, "STARTED_AT": "2026-09-14T09:29:56.892Z", "FINISHED_AT": "2026-09-14T09:29:57.968Z", "DURATION_MS": 1075, "EXIT_CODE": "COMPLETED" }, { "PARTITION_NAME": "ordersWorkerStep:partition1", "THREAD_NAME": "order-partition-1", "READ_COUNT": 5000, "STARTED_AT": "2026-09-14T09:29:56.895Z", "FINISHED_AT": "2026-09-14T09:29:57.999Z", "DURATION_MS": 1103, "EXIT_CODE": "COMPLETED" }, { "PARTITION_NAME": "ordersWorkerStep:partition2", "THREAD_NAME": "order-partition-4", "READ_COUNT": 5000, "STARTED_AT": "2026-09-14T09:29:56.900Z", "FINISHED_AT": "2026-09-14T09:29:57.964Z", "DURATION_MS": 1064, "EXIT_CODE": "COMPLETED" }, { "PARTITION_NAME": "ordersWorkerStep:partition3", "THREAD_NAME": "order-partition-3", "READ_COUNT": 5000, "STARTED_AT": "2026-09-14T09:29:56.901Z", "FINISHED_AT": "2026-09-14T09:29:58.002Z", "DURATION_MS": 1101, "EXIT_CODE": "COMPLETED" } ]