← All courses

☕ Java & Groovy for Data

Do the data half of the job in the language your company already runs — streams and records, JDBC and DuckDB, with Groovy for the parts where Java makes you type too much.

No lessons published yet — this is the roadmap, so you can see exactly what the course will cover before it lands.

Before you start: Learn SQL — Series 1. Series 1 of Learn SQL is the whole prerequisite: SELECT, WHERE, JOIN and GROUP BY. Once you start running queries from Java here, you check the answers against the same Northwind numbers the SQL koans use. You are never asked to write clever SQL — but you do need to read a query and know what it should come back with, because that is how you tell a JVM bug from a SQL one.

Short on time? The 31 episodes marked core are the shortest path to being productive at work. Start there and pick up the rest whenever a job asks for them.


Series 1 · Java & Groovy for Data Fundamentals

write a Java or Groovy script that reads and reshapes data

  1. 01

    Your First Script — Read a CSV File and Answer One Question About It

    corebeginner#foundationalcoming soon
  2. 02

    Records and Collections — Holding Rows and Tables in Memory

    corebeginnercoming soon
  3. 03

    Streams — Transforming Rows With map, filter and collect

    corebeginner#foundationalcoming soon
  4. 04

    Groovy Collections — Filtering, Transforming and Grouping in Less Code

    beginnercoming soon
  5. 05

    Files and Encodings — Reading Text Files in the Right Character Set

    corebeginnercoming soon
  6. 06

    java.time — Working With Dates, Times and Time Zones Correctly

    corebeginnercoming soon
  7. 07

    Nulls and Optional — Handling Data That Is Missing

    corebeginnercoming soon
  8. 08

    Money and BigDecimal — Doing Arithmetic on Amounts and Rounding Them

    corebeginnercoming soon
  9. 09

    Grouping and Aggregating — Summarising Rows With groupingBy

    corebeginnercoming soon
  10. 10

    Joining Two Datasets in Memory — Combining Rows Without Doubling Totals

    corebeginnercoming soon
  11. 11

    Your First End-to-End Script — From a File to a Finished Answer

    corebeginner#projectcoming soon

Series 2 · Working With Real Data

files, databases and APIs — nothing pre-cleaned

  1. 01

    CSV, JSON and Parquet — Reading the Three Formats You Will Meet Most

    coreintermediatecoming soon
  2. 02

    Excel with POI — Reading and Writing the Spreadsheets Your Business Needs

    intermediatecoming soon
  3. 03

    PDF with PDFBox — Reading and Writing the Documents and Reports Your Business Needs

    intermediatecoming soon
  4. 04

    JDBC — Talking to a Database From Java: Connection, Statement, ResultSet

    coreintermediate#foundationalcoming soon
  5. 05

    PreparedStatement — Passing Values Safely Into a Query

    coreintermediatecoming soon
  6. 06

    Text Blocks — Writing Multi-Line SQL Inside Java Code

    intermediatecoming soon
  7. 07

    groovy.sql.Sql — Running Queries With Much Less Code

    coreintermediatecoming soon
  8. 08

    jOOQ — Writing SQL in Java That the Compiler Checks

    intermediatecoming soon
  9. 09

    MyBatis — Mapping Hand-Written SQL Onto Java Objects

    intermediatecoming soon
  10. 10

    Batches and Transactions — Inserting Many Rows Quickly and Safely

    coreintermediatecoming soon
  11. 11

    Streaming Large Results — Reading Millions of Rows Without Filling Memory

    coreintermediatecoming soon
  12. 12

    DuckDB from Java — An Analytics Engine Inside Your Process

    intermediatecoming soon
  13. 13

    Choosing Database Access — Picking Between JDBC, jOOQ, MyBatis and DuckDB

    coreintermediatecoming soon
  14. 14

    HTTP and JSON — Reading Data From an API With HttpClient and Jackson

    coreintermediatecoming soon
  15. 15

    Retry, Backoff and Pagination — Fetching From an API Reliably

    intermediatecoming soon
  16. 16

    Virtual Threads and Parallel Streams — Running Slow Calls in Parallel

    intermediatecoming soon
  17. 17

    Cleaning and Validating — Checking Data Before You Load It

    coreintermediatecoming soon
  18. 18

    Project — One Answer From a CSV, a Database and an API

    coreintermediate#projectcoming soon

Series 3 · Java That Ships

code someone else can run next month

  1. 01

    Maven, Gradle and @Grab — Dependencies for Apps and for Scripts

    coreadvancedcoming soon
  2. 02

    Project Structure — Where the Data Code Goes

    advancedcoming soon
  3. 03

    Command-Line Tools — Arguments, Exit Codes and picocli

    coreadvancedcoming soon
  4. 04

    Configuration and Secrets — Keeping Passwords Out of Your Code

    coreadvancedcoming soon
  5. 05

    Liquibase — Database Changes Kept in Version Control, Written in Groovy

    coreadvancedcoming soon
  6. 06

    Logging and Failure — What Someone Needs to See When the Job Breaks

    coreadvancedcoming soon
  7. 07

    Testing Data Code — Testcontainers and the Database You Actually Ship

    advancedcoming soon
  8. 08

    Performance and Memory — Measure Before You Change Anything

    advancedcoming soon
  9. 09

    Before You Reach for Threads — Push It Down to the Engine

    coreadvancedcoming soon
  10. 10

    Fan-Out and Bounded Memory — N Calls, One Queue, a Flat Heap

    advancedcoming soon
  11. 11

    Partitioned Work — Splitting Rows and Combining Answers

    advanced#dean-mapreducecoming soon
  12. 12

    When One Machine Is Not Enough — What Changes, and What Breaks

    advancedcoming soon
  13. 13

    Project — A Job That Reads, Transforms, Loads and Reports

    coreadvanced#projectcoming soon

Series 4 · Frameworks, Where They Earn It

use JPA, Hibernate and Spring for queries and the jobs that run them

  1. 01

    JPA — Java's Standard Way to Turn Rows Into Objects

    advancedcoming soon
  2. 02

    Hibernate — The Library That Turns Your JPA Code Into SQL

    advancedcoming soon
  3. 03

    Spring JdbcTemplate — Running Your Own SQL From a Spring Application

    coreadvancedcoming soon
  4. 04

    Spring Data Repositories — Your Method Name Becomes the Query

    advancedcoming soon
  5. 05

    GORM — Grails' Data Layer, and the Hibernate Underneath It

    advancedcoming soon
  6. 06

    Liquibase in Spring Boot and Grails — Migrations That Run at Startup

    advancedcoming soon
  7. 07

    Spring Batch — Jobs That Process Rows in Chunks and Restart Where They Stopped

    advancedcoming soon
  8. 08

    Apache Beam — Describing a Pipeline Once and Letting a Runner Execute It

    advancedcoming soon
  9. 09

    Spring Scheduling — Running a Data Job on a Timer Inside Your Application

    advancedcoming soon
  10. 10

    DataPallas Crons — Scheduling the dbt Transform and the Excel Refresh

    coreadvancedcoming soon
  11. 11

    ShedLock — Locking a Scheduled Task So Only One Instance Runs It

    advancedcoming soon
  12. 12

    Quartz — Storing Schedules in a Database and Firing Them Once Across Instances

    advancedcoming soon
  13. 13

    Choosing a Framework — Picking Between JPA, Spring Data, GORM, Spring Batch and Quartz

    coreadvancedcoming soon
  14. 14

    Project — Add a Data Feature to the DataPallas Grails App

    coreadvanced#projectcoming soon

Where this leads

  • Grails — starts from Series 1, and Series 4.
  • Spring Boot — starts from Series 1, and Series 4.

Not here, on purpose

  • Controllers, dependency injection, security and the web layer — not covered; Series 4 teaches Spring and Grails only where they read and write rows
  • Hibernate internals and JPA entity mapping in depth — not covered by design. In this course, Series 4 · 00 teaches JPA as the vocabulary and Series 4 · 05 the one Hibernate behaviour that costs you memory on a bulk load
  • Deciding what the schema change should be — covered in Data Modeling, Series 2 · 50. In this course, Series 3 · 20 applies a change that has already been designed
  • Running a migration against a live database under load — locks, zero downtime — covered in Data Ops — here the question is only how the change gets versioned and shipped from your build
  • Making a load re-runnable — MERGE, watermarks and proving nothing changed — covered in ETL & Data Pipelines, Series 1 · 30 and · 35. In this course, Series 2 · 55 covers only the request-level half — whether it is safe to RETRY a call whose outcome you never learned
  • Machine learning — features, training, model selection — not covered; this track moves and shapes data. For LLM-era work see AI for Data
  • OCR, and getting data out of scanned documents — not covered. Series 2 · 07 teaches you to RECOGNISE that a PDF carries no text layer — which is the decision you actually have to make — but extracting from an image is a different tool and a different problem
  • Charts other people read, and dashboards — covered in BI & Data Visualization — here you plot only to see the data yourself
  • cron, systemd timers, and choosing an orchestrator — covered in Data Ops — here the scheduler runs inside your own Spring Boot app, which fails in different ways. In this course, Series 4 · 30 and · 35
  • Writing the SQL itself — covered in Learn SQL — here the SQL is assumed and the question is how to run it from the JVM