Java adalah bahasa pemrograman berorientasi objek yang berjalan di atas Java Virtual Machine (JVM). Pada Course ini, kita akan mempelajari Java secara bertahap mulai dari fondasi bahasa, object-oriented programming, collections, concurrency, hingga membangun aplikasi nyata siap produksi.

Bab 4 Variabel dan Tipe Data

# Variabel

Pelajari cara membuat, memberi nilai, dan menggunakan variabel dalam program Java.

Buka →
# Primitive Data Types

Kenali delapan tipe primitive Java beserta rentang nilai dan ukuran memorinya.

Buka →
# Reference Types

Pahami perbedaan variabel reference yang menunjuk objek dari variabel primitive.

Buka →
# Deklarasi dan Inisialisasi

Pelajari berbagai bentuk deklarasi dan inisialisasi variabel, termasuk deklarasi banyak variabel sekaligus.

Buka →
# Type Inference dengan var

Gunakan var untuk deklarasi variabel lokal yang ringkas tanpa kehilangan keamanan tipe.

Buka →
# Konstanta dengan final

Ciptakan nilai yang tidak dapat diubah dengan variabel final dan konstanta static final.

Buka →
# Type Conversion

Pahami konversi tipe otomatis (widening) dari tipe kecil ke tipe yang lebih besar.

Buka →
# Type Casting

Lakukan konversi tipe eksplisit (narrowing) dan pahami risiko kehilangan datanya.

Buka →
# Numeric Promotion

Ikuti aturan promosi numerik Java ketika tipe berbeda terlibat dalam satu operasi.

Buka →
# Integer Overflow

Amati apa yang terjadi saat nilai integer melewati batas dan cara mengatasinya dengan Math.addExact.

Buka →
# Floating-Point Precision

Pahami keterbatasan presisi floating-point IEEE 754 dan cara membandingkannya dengan benar.

Buka →
# Wrapper Classes

Kenali class pembungkus untuk tipe primitive dan perannya di dunia berorientasi objek.

Buka →
# Autoboxing dan Unboxing

Pelajari konversi otomatis antara tipe primitive dan wrapper beserta jebakannya.

Buka →
# Scope dan Lifetime

Pahami di mana sebuah variabel dapat diakses dan berapa lama variabel tersebut hidup.

Buka →

Bab 9 Array dan String

# Array Satu Dimensi

Simpan kumpulan nilai berurutan dalam array dan akses elemennya lewat indeks.

Buka →
# Array Multidimensi

Bangun struktur data berbentuk tabel dengan array dua dimensi dan lebih.

Buka →
# Array Initialization

Isi array saat deklarasi dengan array initializer dan default value elemennya.

Buka →
# Array Copying

Salin array dengan cara manual, System.arraycopy, dan Arrays.copyOf.

Buka →
# Array Utilities

Manfaatkan class Arrays untuk mengisi, membandingkan, mengurutkan, dan mencetak array.

Buka →
# Array of Objects

Simpan referensi objek dalam array dan pahami nilai default elemennya.

Buka →
# String Fundamentals

Pelajari dasar pembuatan dan penggabungan String di Java.

Buka →
# String Immutability

Pahami mengapa String tidak dapat diubah dan apa akibatnya bagi konkatenasi.

Buka →
# String Pool

Kenali string pool dan interning yang membuat Java menghemat memori String.

Buka →
# String Comparison

Bandingkan String dengan benar menggunakan equals alih-alih operator ==.

Buka →
# String Methods

Kuasai method String yang sering dipakai: length, charAt, substring, indexOf, dan split.

Buka →
# StringBuilder

Rangkai teks secara efisien dalam perulangan dengan StringBuilder.

Buka →
# StringBuffer

Kenali StringBuffer versi thread-safe dan kapan StringBuilder lebih tepat.

Buka →
# Text Blocks

Tulis string multi-baris yang rapi dengan text blocks tiga tanda kutip.

Buka →
# Regular Expressions

Cocokkan pola teks dengan regex dan class Pattern serta Matcher.

Buka →
# Manipulasi Teks

Terapkan transformasi teks sehari-hari: trim, replace, join, dan format ulang.

Buka →

Bab 10 Object-Oriented Programming

# Konsep Object-Oriented Programming

Pahami empat pilar OOP dan bagaimana Java menerapkannya dalam desain program.

Buka →
# Class dan Object

Definisikan class sebagai cetak biru dan wujudkan object dari class tersebut.

Buka →
# Fields dan Methods

Simpan data pada fields dan tambahkan perilaku melalui methods.

Buka →
# Constructors

Inisialisasi object dengan constructor dan atur kondisi awal yang valid.

Buka →
# Constructor Overloading

Sediakan beberapa bentuk constructor dan rangkai dengan this().

Buka →
# Keyword this

Rujuk object aktif dari dalam method dengan this dan bedakan dari parameter.

Buka →
# Encapsulation

Sembunyikan data di balik method akses dan lindungi invarian internal objek.

Buka →
# Access Modifiers

Kendalikan visibilitas member dengan public, private, protected, dan package-private.

Buka →
# Static Members

Pelajari member milik class yang dibagikan semua object dan jebakan shared state.

Buka →
# Inheritance

Warisi field dan method dari superclass dan bangun hierarki class yang bermakna.

Buka →
# Keyword super

Akses member superclass dan rangkai constructor induk dengan super().

Buka →
# Method Overriding

Ubah perilaku method warisan dengan @Override dan aturan kovariansi return.

Buka →
# Polymorphism

Panggil method yang sama pada tipe berbeda dan pahami dynamic method dispatch.

Buka →
# Abstract Classes

Definisikan kontrak parsial dengan abstract class dan method abstraknya.

Buka →
# Interfaces

Rumuskan kontrak perilaku murni dengan interface dan implementasikan di class.

Buka →
# Default dan Static Interface Methods

Tambahkan implementasi bawaan pada interface tanpa merusak class lama.

Buka →
# Composition vs Inheritance

Pilih komposisi saat pewarisan memaksa coupling yang tidak perlu.

Buka →
# Association, Aggregation, dan Composition

Bedakan tiga bentuk hubungan antar objek dan implikasinya bagi kepemilikan.

Buka →
# Object Lifecycle

Ikuti perjalanan objek dari penciptaan, penggunaan, hingga menjadi eligible untuk GC.

Buka →
# Object Equality

Bedakan kesamaan identitas (==) dari kesamaan nilai logis lewat equals.

Buka →
# hashCode dan equals

Implementasikan pasangan hashCode/equals dengan benar agar collection berperilaku tepat.

Buka →
# Object Cloning

Salin objek dengan clone(), copy constructor, dan salin manual yang aman.

Buka →
# Immutability

Rancang class yang tidak dapat diubah dan nikmati keamanannya di concurrency.

Buka →
# Records

Buat pembawa data ringkas dengan records beserta compact constructor.

Buka →
# Sealed Classes

Batasi hierarki pewarisan dengan sealed classes dan permits.

Buka →
# Prinsip Desain OOP

Terapkan prinsip desain berorientasi objek agar class mudah dirawat dan diperluas.

Buka →

Bab 12 Exception Handling

# Konsep Exception

Pahami gagasan exception sebagai mekanisme melaporkan kegagalan tanpa menghentikan program secara tiba-tiba.

Buka →
# Exception Hierarchy

Petakan hierarki Throwable dari Error, Exception, hingga RuntimeException.

Buka →
# try-catch

Tangkap dan tangani exception dengan blok try-catch agar program tetap terkendali.

Buka →
# Multiple catch

Tangani beberapa jenis exception dengan blok catch berurutan dan multi-catch.

Buka →
# Blok finally

Pastikan pembersihan selalu berjalan dengan blok finally.

Buka →
# try-with-resources

Tutup resource secara otomatis dengan try-with-resources dan interface AutoCloseable.

Buka →
# Checked vs Unchecked Exceptions

Bedakan exception yang wajib ditangani compiler dari yang muncul saat runtime.

Buka →
# throw dan throws

Lempar exception dengan throw dan nyatakan kemungkinan kegagalan dengan throws.

Buka →
# Custom Exceptions

Ciptakan jenis exception sendiri yang menyampaikan kegagalan domain secara jelas.

Buka →
# Exception Chaining

Pertahankan akar masalah dengan exception chaining saat membungkus exception.

Buka →
# Exception Propagation

Ikuti perjalanan exception naik dari method ke pemanggil hingga ditangani.

Buka →
# Suppressed Exceptions

Pahami exception yang tertindih saat penutupan resource dan cara membacanya.

Buka →
# Error vs Exception

Bedakan Error untuk kegagalan sistem dari Exception untuk kegagalan program.

Buka →
# Strategi Exception Handling

Pilih strategi menangani, membungkus, atau meneruskan exception secara sadar.

Buka →

Bab 13 Collections Framework

# Collection Hierarchy

Petakan hierarki interface Collection dan Map beserta implementasi utamanya.

Buka →
# List Interface

Kenali kontrak List yang berurutan dan berindeks sebelum memilih implementasinya.

Buka →
# ArrayList

Gunakan ArrayList sebagai list berbasis array yang serba bisa dan cepat diakses.

Buka →
# LinkedList

Pelajari LinkedList berbasis node dan skenario yang menguntungkannya.

Buka →
# Set Interface

Kenali kontrak Set yang menolak duplikat dan konsekuensi equals/hashCode.

Buka →
# HashSet

Simpan elemen unik dengan hashing dan pahami urutan iterasinya.

Buka →
# LinkedHashSet

Pertahankan urutan penyisipan dalam Set dengan LinkedHashSet.

Buka →
# TreeSet

Jaga elemen terurut dengan TreeSet dan interface NavigableSet.

Buka →
# Queue Interface

Kenali antrian FIFO dan operasi khasnya pada interface Queue.

Buka →
# Deque Interface

Kelola antrian dua arah dengan Deque untuk stack maupun queue.

Buka →
# PriorityQueue

Layani elemen berdasarkan prioritas dengan heap berbasis PriorityQueue.

Buka →
# Map Interface

Kenali kontrak pemetaan key ke value dan method utamanya.

Buka →
# HashMap

Gunakan HashMap untuk pencarian cepat berbasis hash.

Buka →
# LinkedHashMap

Pertahankan urutan penyisipan dan bangun cache sederhana dengan LinkedHashMap.

Buka →
# TreeMap

Susun key secara terurut dan lakukan pencarian rentang dengan TreeMap.

Buka →
# Hashtable

Kenali Hashtable versi lawas, perbedaannya dari HashMap, dan alasan migrasinya.

Buka →
# Iterator dan ListIterator

Telusuri collection dengan Iterator dan hindari ConcurrentModificationException.

Buka →
# Comparable dan Comparator

Tentukan urutan elemen dengan Comparable dan Comparator termasuk comparator modern.

Buka →
# Immutable Collections

Ciptakan collection yang tidak berubah dengan List.of, Map.of, dan copyOf.

Buka →
# Collection Utilities

Manfaatkan class Collections dan Arrays untuk operasi serbaguna.

Buka →
# Memilih Collection yang Tepat

Padukan kebutuhan akses data dengan struktur collection yang paling sesuai.

Buka →
# Performa Collection

Bandingkan kompleksitas operasi tiap collection dan dampaknya pada desain.

Buka →

Bab 16 Stream API

# Stream Fundamentals

Pahami konsep pipeline stream sebagai alternatif perulangan imperatif.

Buka →
# Creating Streams

Bangun stream dari collection, array, nilai, dan generator.

Buka →
# Intermediate vs Terminal Operations

Bedakan operasi lazy yang menyusun pipeline dari operasi yang menjalankannya.

Buka →
# filter

Saring elemen stream dengan Predicate sesuai kriteria.

Buka →
# map dan flatMap

Ubah tiap elemen dengan map dan ratakan struktur bersarang dengan flatMap.

Buka →
# sorted dan distinct

Urutkan elemen dan buang duplikat dalam pipeline stream.

Buka →
# limit, skip, takeWhile, dan dropWhile

Kendalikan jumlah dan rentang elemen yang diproses stream.

Buka →
# reduce

Agregasi seluruh elemen menjadi satu nilai dengan reduce.

Buka →
# collect

Kumpulkan hasil stream ke collection atau struktur lain dengan collect.

Buka →
# Collectors

Kenali Collector bawaan untuk toList, joining, averaging, dan sebagainya.

Buka →
# groupingBy dan partitioningBy

Kelompokkan data berdasarkan kunci dan pisahkan berdasarkan kondisi.

Buka →
# Primitive Streams

Hindari boxing dengan IntStream, LongStream, dan DoubleStream.

Buka →
# Optional

Nyatakan nilai yang mungkin tidak ada dengan Optional dan rantai operasinya.

Buka →
# Stream Laziness

Amati cara stream menunda pekerjaan hingga terminal operation berjalan.

Buka →
# Stream Ordering

Pahami encounter order dan flag unordered pada stream.

Buka →
# Parallel Streams

Paralelkan pipeline dengan parallelStream dan kenali risikonya.

Buka →
# Performa Stream

Ukur dan bandingkan performa stream terhadap perulangan biasa.

Buka →
# Best Practices Stream

Tulis pipeline stream yang terbaca, aman, dan tidak berlebihan.

Buka →

Bab 18 File I/O dan NIO

Bab 19 Concurrency dan Multithreading

# Proses vs Thread

Bedakan proses dan thread beserta implikasi memori dan komunikasinya.

Buka →
# Membuat Thread

Ciptakan dan jalankan thread dengan subclass Thread maupun Runnable.

Buka →
# Runnable dan Callable

Bandingkan dua kontrak eksekusi dan hasil yang dapat dikembalikan.

Buka →
# Thread Lifecycle

Ikuti state thread dari NEW hingga TERMINATED dan transisinya.

Buka →
# Thread Priority dan Daemon

Atur prioritas dan mode daemon beserta batas kendali nyatanya.

Buka →
# Race Conditions

Amati kesalahan akibat akses bersama tanpa koordinasi dan cara mereproduksinya.

Buka →
# synchronized

Lindungi critical section dengan method dan blok synchronized.

Buka →
# Intrinsic Locks

Pahami lock bawaan setiap objek dan sifat reentrannya.

Buka →
# volatile

Jamin visibilitas perubahan antar thread dengan volatile dan batasnya.

Buka →
# Atomic Variables

Lakukan operasi gabungan tanpa lock dengan class Atomic.

Buka →
# Lock dan ReentrantLock

Gunakan lock eksplisit dengan fitur tryLock, fairness, dan interruptible.

Buka →
# ReadWriteLock

Izinkan pembaca bersamaan dengan ReadWriteLock dan tulis eksklusif.

Buka →
# Deadlock

Pahami terbentuknya deadlock, cara mendeteksi, dan mencegahnya.

Buka →
# Livelock dan Starvation

Kenali dua masalah koordinasi lain selain deadlock dan mitigasinya.

Buka →
# wait, notify, dan notifyAll

Koordinasi antar thread dengan wait/notify pada intrinsic lock.

Buka →
# ExecutorService

Serahkan pengelolaan thread ke ExecutorService dan shut down dengan benar.

Buka →
# Thread Pools

Pilih ukuran dan jenis pool sesuai sifat pekerjaan aplikasi.

Buka →
# Future dan CompletableFuture

Ambil hasil asinkron dan rangkai tahapan dengan CompletableFuture.

Buka →
# Concurrent Collections

Gunakan collection thread-safe seperti ConcurrentHashMap dan CopyOnWriteArrayList.

Buka →
# Fork/Join Framework

Pecah pekerjaan rekursif dan gabungkan hasilnya dengan work stealing.

Buka →
# Parallel Streams dan Concurrency

Pahami hubungan parallel stream dengan ForkJoinPool dan kesalahpakaiannya.

Buka →
# Virtual Threads

Skalakan jutaan task ringan dengan virtual threads Java modern.

Buka →
# Structured Concurrency

Padatkan lifecycle task bersaudara dengan pola structured concurrency.

Buka →
# Thread Safety

Kenali sumber bahaya visibility dan atomicity beserta resep amannya.

Buka →
# Best Practices Concurrency

Rangkai prinsip desain concurrency yang sederhana dan dapat diuji.

Buka →

Bab 21 Database Programming

# Fundamentals Relational Database

Pahami tabel, kunci, dan relasi sebagai fondasi bekerja dengan JDBC.

Buka →
# Arsitektur JDBC

Bedah lapisan JDBC dari DriverManager sampai driver, plus bukti alur lewat driver buatan sendiri.

Buka →
# Database Drivers dan JDBC URL

Pelajari cara driver terdaftar lewat SPI, dikelola sebagai dependensi, dan dialamatkan lewat URL JDBC.

Buka →
# Membuka Koneksi ke Database

Buka koneksi JDBC, kelola kredensial lewat Properties, dan diagnosis kegagalan lewat SQLException.

Buka →
# Mengeksekusi SQL dengan Statement

Kirim SQL ke database lewat Statement: executeQuery, executeUpdate, execute, dan penutupan resource yang rapi.

Buka →
# PreparedStatement dan Parameter Terikat

Pahami pre-compilation SQL, placeholder berindeks 1, dan mengapa PreparedStatement menutup celah penggabungan teks.

Buka →
# Menjelajah Hasil dengan ResultSet

Gulir kursor ResultSet, baca kolom lewat indeks atau label, dan tangani NULL dengan wasNull.

Buka →
# Transaksi dengan JDBC

Kuasai setAutoCommit, commit, rollback, dan savepoint untuk menjaga atomisitas operasi database.

Buka →
# Batch Processing

Gabungkan banyak INSERT, UPDATE, dan DELETE menjadi satu executeBatch untuk memangkas bolak-balik jaringan.

Buka →
# Generated Keys

Ambil kunci primer otomatis hasil INSERT lewat RETURN_GENERATED_KEYS dan getGeneratedKeys.

Buka →
# Mencegah SQL Injection

Bedah anatomi serangan SQL injection lalu bangun pertahanan berlapis dari PreparedStatement sampai hak akses minimum.

Buka →
# Connection Pooling

Pahami kenapa koneksi mahal, cara pool memakai ulangnya, dan konfigurasi HikariCP lewat DataSource.

Buka →
# Pola DAO (Data Access Object)

Pisahkan kode akses data dari logika bisnis lewat interface DAO dan transfer object yang mudah diuji.

Buka →
# Pattern Repository

Abstraksi akses data berorientasi domain dengan Repository.

Buka →
# Database Migrations

Kelola perubahan skema secara terkendali dan terversi.

Buka →
# Best Practices JDBC

Rangkai praktik JDBC yang aman dari resource sampai transaksi.

Buka →

Bab 25 Testing

# Testing Fundamentals

Pahami piramida pengujian dan peran tiap lapisannya.

Buka →
# Unit Testing

Rancang unit test kecil, cepat, dan terisolasi untuk method Anda.

Buka →
# JUnit Jupiter

Kenali anotasi dan lifecycle JUnit 5 sebagai standar testing Java.

Buka →
# Assertions

Verifikasi hasil dengan Assertions JUnit dan AssertJ yang ekspresif.

Buka →
# Parameterized Tests

Uji banyak kasus dari satu method uji dengan @ParameterizedTest.

Buka →
# Lifecycle Methods

Siapkan dan bersihkan kondisi uji dengan @BeforeEach dan @AfterAll.

Buka →
# Test Fixtures

Bangun data uji yang stabil dan mudah dirawat.

Buka →
# Mocking Fundamentals

Pahami mock sebagai alat memutus dependensi eksternal.

Buka →
# Mockito

Buat mock, stub, dan verifikasi interaksi dengan Mockito.

Buka →
# Stubs, Mocks, dan Fakes

Bedakan tiga jenis test double dan kapan memakainya.

Buka →
# Integration Testing

Uji komponen yang bekerja bersama dengan lingkup terkendali.

Buka →
# Database Testing

Uji akses data dengan transaksi tergulung dan basis data uji.

Buka →
# Testing Exceptions

Verifikasi bahwa jalur gagal melempar exception yang benar.

Buka →
# Test Coverage

Baca laporan coverage JaCoCo dan gunakannya secara bijak.

Buka →
# Property-Based Testing

Uji properti yang berlaku untuk semua input dengan jqwik.

Buka →
# Testcontainers

Jalankan dependensi nyata dalam container Docker saat pengujian.

Buka →
# Testing Kode Concurrency

Uji kode paralel dengan pola yang deterministik dan timeout ketat.

Buka →
# Best Practices Testing

Susun suite uji yang cepat, jelas, dan dapat dipercaya.

Buka →

Bab 27 Software Design dan Architecture

# Prinsip SOLID

Pahami lima prinsip desain class yang menjadi dasar arsitektur sehat.

Buka →
# Separation of Concerns

Pisahkan tanggung jawab agar tiap bagian berubah karena satu alasan.

Buka →
# Dependency Inversion

Balik arah dependensi agar detail mengikuti abstraksi.

Buka →
# Dependency Injection

Suntikkan dependensi dari luar agar komponen mudah diuji dan diganti.

Buka →
# Composition over Inheritance

Susun perilaku dari bagian kecil alih-alih mewarisinya.

Buka →
# Clean Code

Tulis kode yang dibaca manusia dengan penamaan dan fungsi yang jujur.

Buka →
# Design by Contract

Nyatakan prasyarat dan jaminan method secara eksplisit.

Buka →
# Defensive Programming

Lindungi kode dari input dan state yang tidak masuk akal.

Buka →
# Object-Oriented Design

Terjemahkan kebutuhan menjadi class dan interaksi yang koheren.

Buka →
# Layered Architecture

Susun aplikasi berlapis presentation, business, dan persistence.

Buka →
# Hexagonal Architecture

Isolasi domain dari detail teknologi lewat ports and adapters.

Buka →
# Clean Architecture

Arahkan dependensi menuju domain yang berada di pusat.

Buka →
# Domain-Driven Design

Selaraskan kode dengan bahasa dan batasan domain bisnis.

Buka →
# Domain Modeling

Bangun model domain dengan entity, value object, dan aggregate.

Buka →
# Design Patterns

Kenali katalog pola solusi berulang dan cara memakainya tepat.

Buka →
# Factory Pattern

Pusatkan penciptaan objek dengan factory method dan abstract factory.

Buka →
# Builder Pattern

Rakit objek kompleks langkah demi langkah dengan builder.

Buka →
# Strategy Pattern

Tukar algoritma saat runtime dengan strategy dan lambda.

Buka →
# Observer Pattern

Siarkan peristiwa ke banyak pendengar secara longgar.

Buka →
# Adapter Pattern

Jembatani antarmuka yang tidak cocok dengan adapter.

Buka →
# Decorator Pattern

Tambah perilaku membungkus objek tanpa mengubah class asal.

Buka →
# Repository Pattern

Hadirkan koleksi domain yang menyerap detail persistensi.

Buka →
# Unit of Work Pattern

Kumpulkan perubahan dan simpan sekali dalam satu transaksi.

Buka →
# Memilih Arsitektur Aplikasi

Timbang ukuran tim, domain, dan kendala untuk memilih arsitektur.

Buka →

Bab 32 Spring Framework

# Pengenalan Spring

Kenali Spring, container IoC, dan alasan dominasinya di ekosistem Java.

Buka →
# Dependency Injection dengan Spring

Serahkan penyambungan komponen kepada container Spring.

Buka →
# Spring Container dan Beans

Pahami bean definition, scope, dan lifecycle di ApplicationContext.

Buka →
# Configuration dan Profiles

Konfigurasi bean dengan anotasi, Java Config, dan profile per lingkungan.

Buka →
# Spring Boot Fundamentals

Kenali auto-configuration dan starter yang memangkas konfigurasi manual.

Buka →
# Setup Proyek dengan Spring Initializr

Lahirkan proyek Spring Boot siap pakai dengan Spring Initializr.

Buka →
# Application Properties

Atur konfigurasi aplikasi lewat application.properties dan YAML.

Buka →
# Spring MVC

Pahami alur request melalui DispatcherServlet dan komponen MVC.

Buka →
# Controllers dan Routing

Petakan endpoint ke method controller dengan @RestController.

Buka →
# Request Binding

Ikat path variable, query param, dan body JSON ke parameter method.

Buka →
# Validasi dengan Spring

Validasi input dengan Bean Validation dan anotasi constraint.

Buka →
# Exception Handling dengan Spring

Pusatkan penanganan kesalahan dengan @ExceptionHandler dan RFC 7807.

Buka →
# Spring Data JPA

Kenali abstraksi repository yang menyerap boilerplate JDBC.

Buka →
# Entities dan Repositories

Petakan tabel ke entity dan query ke method repository.

Buka →
# Transaksi Database

Kendalikan batas transaksi secara deklaratif dengan @Transactional.

Buka →
# Spring Security

Kenali filter chain dan arsitektur keamanan Spring Security.

Buka →
# Authentication dan Authorization

Beda kenalan pengguna dari pemberian izin berbasis role dan authority.

Buka →
# Password Encoding

Simpan kata sandi ter-hash dengan BCrypt dan DelegatingPasswordEncoder.

Buka →
# REST API dengan Spring Boot

Rangkai CRUD REST API lengkap berlapis dengan Spring Boot.

Buka →
# Pagination dan Sorting

Sajikan data besar per halaman dengan Pageable dan Page.

Buka →
# File Upload

Terima unggahan berkas multipart dan simpan dengan aman.

Buka →
# Caching

Percepat respons dengan cache deklaratif dan CacheManager.

Buka →
# Scheduled Tasks

Jalankan pekerjaan berkala dengan @Scheduled dan cron expression.

Buka →
# Pemrosesan Asinkron

Tangani pekerjaan latar dengan @Async dan executor khusus.

Buka →
# Testing Spring Boot

Uji lapisan web dan data dengan @WebMvcTest, @DataJpaTest, dan Testcontainers.

Buka →
# Actuator dan Health Checks

Pantau aplikasi berjalan lewat endpoint Actuator dan health indicator.

Buka →
# Observability Aplikasi

Rangkai log terstruktur, metrics, dan tracing ala Micrometer.

Buka →
# Kesiapan Produksi Spring Boot

Kemas, konfigurasi, dan amankan aplikasi sebelum naik ke produksi.

Buka →

Bab 34 Deployment dan Production

# Packaging Executable JAR

Bangun fat JAR yang dapat dijalankan dengan satu perintah java -jar.

Buka →
# jlink

Rangkai runtime minimal khusus aplikasi dengan jlink dan jdeps.

Buka →
# jpackage

Bundel aplikasi Java menjadi installer platform dengan jpackage.

Buka →
# Konfigurasi Environment

Pisahkan konfigurasi dari kode agar satu build berlaku di banyak lingkungan.

Buka →
# Externalized Configuration

Baca konfigurasi dari environment variable dan berkas di luar JAR.

Buka →
# Docker Fundamentals

Kenali image, container, dan Dockerfile untuk aplikasi Java.

Buka →
# Containerizing Aplikasi Java

Tulis Dockerfile JVM yang efisien dan sadar memori container.

Buka →
# Docker Multi-Stage Builds

Pisahkan tahap build dan runtime agar image akhir ramping.

Buka →
# CI/CD Fundamentals

Pahami pipeline continuous integration dan delivery untuk proyek Java.

Buka →
# GitHub Actions

Otomatiskan build, test, dan publish JAR dengan workflow GitHub Actions.

Buka →
# Logging Aplikasi

Kelola log produksi: rotasi, format terstruktur, dan retensi.

Buka →
# Health Checks

Ekspos status kesehatan aplikasi untuk orchestrator dan load balancer.

Buka →
# Metrics dan Monitoring

Publikasikan metrik aplikasi dan pantau dengan Micrometer serta Prometheus.

Buka →
# Performance Profiling

Temukan bottleneck produksi dengan profiler dan JFR.

Buka →
# Graceful Shutdown

Hentikan aplikasi dengan menyelesaikan pekerjaan yang sedang berjalan.

Buka →
# Troubleshooting Produksi

Diagnosis aplikasi sakit di produksi dengan langkah sistematis.

Buka →
# Release Management

Kelola versi rilis, changelog, dan strategi rollout mundur.

Buka →