
Spring Boot Terungkap: Menyulap Produktivitas Java dengan Konfigurasi Minimalis
Pahami bagaimana Spring Boot merevolusi pengembangan aplikasi Java, dari auto-configuration cerdas hingga embedded server. Pelajari cara membangun microservices dan aplikasi web modern dengan cepat dan efisien.
Spring Boot: Sihir di Balik Produktivitas Java Modern
Bayangkan membangun aplikasi Java enterprise yang kompleks: Anda memerlukan server web, koneksi database, sistem keamanan, manajemen transaksi, dan segudang konfigurasi lainnya. Secara tradisional, ini melibatkan banyak file XML yang rumit dan setup manual yang memakan waktu. Lalu, datanglah Spring Boot, sebuah proyek dari keluarga besar Spring yang bertindak seperti asisten cerdas, mengambil alih banyak pekerjaan konfigurasi yang membosankan dan memungkinkan Anda untuk fokus pada penulisan kode bisnis yang sebenarnya.
Spring Boot bukanlah framework baru yang terpisah, melainkan sebuah cara yang lebih cerdas dan cepat untuk menggunakan Spring Framework yang sudah teruji. Ia membawa filosofi “convention over configuration” ke level berikutnya, menawarkan pengalaman pengembangan yang jauh lebih mulus dan produktif. Artikel ini akan membongkar “sihir” di balik Spring Boot, menjelaskan bagaimana ia menyederhanakan pengembangan aplikasi Java modern, dan mengapa ia menjadi pilihan utama untuk membangun microservices dan aplikasi web berperforma tinggi.
1. Mengapa Spring Boot Lahir? Memecahkan “Kutukan” Konfigurasi Spring Tradisional
Spring Framework adalah fondasi yang sangat kuat untuk aplikasi Java, menyediakan fitur komprehensif seperti:
- Dependency Injection (DI) / Inversion of Control (IoC): Mengelola pembuatan dan ketergantungan objek.
- Aspect-Oriented Programming (AOP): Untuk cross-cutting concerns seperti logging dan security.
- Spring MVC: Framework Model-View-Controller untuk aplikasi web.
- Spring Data: Akses data yang disederhanakan ke berbagai database.
- Spring Security: Keamanan aplikasi yang tangguh.
Namun, kekuatan ini datang dengan harga: kompleksitas konfigurasi. Sebelum Spring Boot, pengembang sering menghabiskan banyak waktu untuk:
- Mengelola Versi Dependensi: Memastikan semua library Spring dan pihak ketiga kompatibel satu sama lain adalah mimpi buruk.
- Konfigurasi XML yang Panjang (XML Hell): Mendefinisikan beans, data sources, transaction managers, dan komponen lainnya dalam file XML yang besar dan rawan kesalahan.
- Setup Server Eksternal: Mengkonfigurasi dan mendeploy aplikasi sebagai WAR (Web Application Archive) file ke server aplikasi eksternal seperti Tomcat atau Jetty.
- Boilerplate Code: Banyak kode berulang untuk setup dasar.
Spring Boot hadir sebagai solusi dengan tujuan utama:
- Mempercepat dan Menyederhanakan Pengembangan Aplikasi Spring.
- Menyediakan pendekatan “opinionated” terhadap konfigurasi, artinya ia membuat pilihan default yang cerdas untuk Anda.
- Memungkinkan pembuatan aplikasi mandiri (stand-alone) yang siap produksi (production-ready) dengan sangat sedikit konfigurasi.
Singkatnya, Spring Boot memungkinkan Anda “just run” aplikasi Anda.
2. “Sihir” di Balik Spring Boot: Konsep Inti yang Mengubah Permainan
Bagaimana Spring Boot mencapai penyederhanaan ini? Melalui beberapa konsep kunci:
A. Auto-Configuration: Asisten Cerdas Anda
Ini adalah jantung dari Spring Boot. Bayangkan Anda menambahkan library database H2 ke proyek Anda. Spring Boot “melihat” ini dan secara otomatis berpikir, “Ah, pengembang ini mungkin butuh DataSource dan koneksi ke database H2 in-memory. Saya akan konfigurasikan itu untuknya!”
- Cara Kerja: Spring Boot memeriksa JAR dependensi yang ada di classpath Anda. Berdasarkan dependensi tersebut, ia mencoba mengkonfigurasi komponen Spring yang relevan secara otomatis.
- Ada
spring-boot-starter-web
? Ia akan mengkonfigurasi DispatcherServlet, embedded Tomcat, Jackson (untuk JSON), dll. - Ada
spring-boot-starter-data-jpa
dan driver MySQL? Ia akan mencoba mengkonfigurasi EntityManagerFactory, DataSource untuk MySQL, dan TransactionManager.
- Ada
- Kondisional: Auto-configuration bersifat kondisional. Ia hanya aktif jika Anda belum menyediakan konfigurasi kustom Anda sendiri untuk komponen tersebut. Misalnya, jika Anda secara eksplisit mendefinisikan
DataSource
bean Anda sendiri, auto-configuration untuk DataSource tidak akan berjalan. - Transparansi: Anda bisa melihat apa saja yang di-auto-configure dengan menjalankan aplikasi menggunakan flag
--debug
atau melalui endpoint Actuator/autoconfig
. - Kustomisasi: Anda dapat dengan mudah menonaktifkan auto-configuration tertentu jika tidak diinginkan menggunakan anotasi
@EnableAutoConfiguration(exclude={...})
atau properti diapplication.properties
.
B. Starter Dependencies: Paket Lengkap untuk Kebutuhan Anda
Daripada mencari dan menambahkan puluhan dependensi individual beserta versinya yang kompatibel, Spring Boot menyediakan “Starters”. Starter adalah deskriptor dependensi yang nyaman yang dapat Anda sertakan dalam build tool Anda (Maven atau Gradle).
- Contoh:
spring-boot-starter-web
: Untuk membangun aplikasi web, termasuk RESTful API, menggunakan Spring MVC. Ini sudah termasuk Tomcat sebagai embedded server dan Jackson untuk JSON.spring-boot-starter-data-jpa
: Untuk persistensi data menggunakan Spring Data JPA dan Hibernate.spring-boot-starter-security
: Untuk mengamankan aplikasi dengan Spring Security.spring-boot-starter-test
: Untuk menulis unit test dan integration test.spring-boot-starter-actuator
: Untuk fitur monitoring dan manajemen aplikasi.
- Manfaat:
- Manajemen Versi Terpusat:
spring-boot-starter-parent
(dalam Maven) atau plugin Spring Boot (dalam Gradle) mengelola versi dari banyak library umum, memastikan kompatibilitas. Anda jarang perlu menentukan versi library secara manual. - Dependensi Transitive yang Tepat: Starter menarik semua dependensi yang diperlukan.
- Manajemen Versi Terpusat:
C. Embedded HTTP Servers: “Just Run” Aplikasi Anda
Lupakan deployment WAR file ke server aplikasi eksternal untuk development atau aplikasi sederhana. Spring Boot dapat menyertakan server HTTP (Tomcat adalah default, Jetty dan Undertow juga didukung) langsung di dalam JAR aplikasi Anda.
- Cara Kerja: Ketika Anda menyertakan
spring-boot-starter-web
, server yang sesuai akan otomatis ditambahkan sebagai dependensi dan dikonfigurasi. - Eksekusi: Anda cukup menjalankan
java -jar nama-aplikasi.jar
, dan aplikasi web Anda akan berjalan dengan server embedded-nya. - Konfigurasi: Port server dan properti lainnya dapat dikonfigurasi di
application.properties
(misalnya,server.port=8090
). - Meskipun embedded server sangat bagus untuk development dan microservices, untuk production skala besar, Anda mungkin masih ingin mendeploy sebagai WAR ke server aplikasi tradisional atau menjalankan JAR di belakang reverse proxy seperti Nginx.
D. application.properties
atau application.yml
: Konfigurasi Eksternal yang Fleksibel
Spring Boot mendorong pemisahan konfigurasi dari kode. File application.properties
(format key-value) atau application.yml
(format YAML) di src/main/resources
adalah tempat utama untuk konfigurasi eksternal.
- Contoh (
application.properties
):# Server Configuration server.port=8080 server.servlet.context-path=/myapp # Database Configuration (contoh MySQL) spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase spring.datasource.username=dbuser spring.datasource.password=dbpass spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true # Logging logging.level.org.springframework.web=DEBUG logging.level.com.example.myapp=INFO # Custom Application Property myapp.feature.enabled=true
- Profil: Anda dapat memiliki file konfigurasi berbeda untuk lingkungan yang berbeda (dev, test, prod) menggunakan profil (misalnya,
application-dev.properties
,application-prod.properties
). Profil aktif ditentukan oleh propertispring.profiles.active
.
3. Anatomi Aplikasi Spring Boot: Memulai Proyek
Titik masuk utama aplikasi Spring Boot adalah class dengan anotasi @SpringBootApplication
.
package com.example.myapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping; // Contoh sederhana REST Controller
import org.springframework.web.bind.annotation.RequestParam; // Contoh sederhana REST Controller
import org.springframework.web.bind.annotation.RestController; // Contoh sederhana REST Controller
@SpringBootApplication // Kunci utama Spring Boot!
@RestController // Menjadikan class ini REST Controller sederhana
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args); // Menjalankan aplikasi
}
// Contoh endpoint sederhana untuk demo
@GetMapping("/hello")
public String sayHello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello, %s!", name);
}
}
@SpringBootApplication
: Ini adalah anotasi kenyamanan yang menggabungkan tiga anotasi penting:@Configuration
: Menandai class sebagai sumber definisi bean untuk konteks aplikasi Spring. Anda dapat mendefinisikan beans menggunakan metode beranotasi@Bean
.@EnableAutoConfiguration
: Memberitahu Spring Boot untuk mulai menambahkan beans berdasarkan pengaturan classpath, beans lain, dan berbagai pengaturan properti.@ComponentScan
: Memberitahu Spring untuk mencari komponen lain (seperti@Controller
,@Service
,@Repository
,@Component
) dalam package di manaMyApplication
berada (dan sub-packagenya). Ini memungkinkan Spring menemukan dan mendaftarkan beans Anda secara otomatis.
SpringApplication.run(...)
: Bootstrap dan meluncurkan aplikasi Spring. Ini membuatApplicationContext
(kontainer IoC Spring), menjalankan auto-configuration, dan memulai embedded server (jika ada starter web).
Struktur Proyek Umum (Maven/Gradle): Aplikasi Spring Boot biasanya mengikuti struktur direktori standar Maven/Gradle:
my-app/
├── pom.xml (atau build.gradle)
└── src/
├── main/
│ ├── java/
│ │ └── com/example/myapp/ (root package Anda)
│ │ ├── MyApplication.java
│ │ ├── controller/ (Untuk @Controller, @RestController)
│ │ ├── service/ (Untuk @Service)
│ │ ├── repository/ (Untuk @Repository)
│ │ ├── model/ (Untuk @Entity atau POJO domain)
│ │ └── config/ (Untuk konfigurasi @Configuration kustom)
│ └── resources/
│ ├── application.properties (atau .yml)
│ ├── static/ (Aset statis: CSS, JS, gambar)
│ └── templates/ (Template HTML: Thymeleaf, Freemarker)
└── test/
└── java/
└── com/example/myapp/ (Tes Anda)
Spring Initializr (start.spring.io): Cara termudah untuk memulai proyek Spring Boot baru. Ini adalah tool web yang memungkinkan Anda memilih versi Spring Boot, build tool (Maven/Gradle), bahasa (Java/Kotlin/Groovy), dan starter dependencies yang Anda butuhkan, lalu menghasilkan struktur proyek dasar yang siap di-import ke IDE Anda.
4. Membangun REST API dengan Spring Boot
Spring Boot sangat cocok untuk membangun RESTful API. spring-boot-starter-web
menyediakan semua yang dibutuhkan.
A. Controller (@RestController
)
Class yang menangani request HTTP masuk dan mengembalikan data (biasanya JSON).
package com.example.myapp.controller;
import com.example.myapp.model.Book; // Asumsikan ada model Book
import com.example.myapp.service.BookService; // Asumsikan ada BookService
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/v1/books") // Base path untuk semua endpoint buku
public class BookController {
private final BookService bookService;
@Autowired // Constructor injection lebih disarankan daripada field injection
public BookController(BookService bookService) {
this.bookService = bookService;
}
// GET /api/v1/books -> Mendapatkan semua buku
@GetMapping
public List<Book> getAllBooks() {
return bookService.findAll();
}
// GET /api/v1/books/{id} -> Mendapatkan buku berdasarkan ID
@GetMapping("/{id}")
public ResponseEntity<Book> getBookById(@PathVariable Long id) {
return bookService.findById(id)
.map(ResponseEntity::ok) // Jika ditemukan, return 200 OK dengan buku
.orElse(ResponseEntity.notFound().build()); // Jika tidak, return 404 Not Found
}
// POST /api/v1/books -> Membuat buku baru
@PostMapping
public ResponseEntity<Book> createBook(@RequestBody Book book) { // @RequestBody: konversi JSON body ke objek Book
Book savedBook = bookService.save(book);
return ResponseEntity.status(HttpStatus.CREATED).body(savedBook); // Return 201 Created
}
// PUT /api/v1/books/{id} -> Memperbarui buku yang ada
@PutMapping("/{id}")
public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book bookDetails) {
return bookService.update(id, bookDetails)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
// DELETE /api/v1/books/{id} -> Menghapus buku
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
if (bookService.deleteById(id)) {
return ResponseEntity.noContent().build(); // Return 204 No Content
}
return ResponseEntity.notFound().build();
}
}
@RestController
: Gabungan dari@Controller
dan@ResponseBody
. Semua metode di dalamnya secara otomatis menganggap return value sebagai response body yang akan diserialisasi (misalnya ke JSON oleh Jackson, yang disertakanspring-boot-starter-web
).- Anotasi Pemetaan HTTP:
@GetMapping
,@PostMapping
,@PutMapping
,@DeleteMapping
,@PatchMapping
untuk memetakan request HTTP ke metode handler. @PathVariable
: Mengekstrak nilai dari URI path (misalnya,/books/{id}
).@RequestParam
: Mengekstrak nilai dari query parameter (misalnya,/books?author=...
).@RequestBody
: Memberitahu Spring untuk mengkonversi body request (biasanya JSON/XML) menjadi objek Java.ResponseEntity<T>
: Memberikan kontrol penuh atas response HTTP, termasuk status code, headers, dan body.
B. Konversi JSON (Jackson)
Secara default, Spring Boot menggunakan library Jackson untuk serialisasi objek Java ke JSON dan deserialisasi JSON ke objek Java. Ini bekerja secara otomatis jika Jackson ada di classpath (disertakan oleh spring-boot-starter-web
).
- Anda dapat mengkustomisasi perilaku Jackson dengan anotasi pada POJO Anda (misalnya,
@JsonIgnore
,@JsonProperty
,@JsonFormat
) atau dengan mengkonfigurasiObjectMapper
bean.
C. Validasi Input (spring-boot-starter-validation
)
Menambahkan starter ini memungkinkan Anda menggunakan anotasi Bean Validation (JSR 380/303) pada objek request Anda.
// Di model Book.java
// import jakarta.validation.constraints.*; // atau javax.validation.constraints.*
// public class Book {
// @NotBlank(message = "Judul tidak boleh kosong")
// @Size(min = 3, max = 100, message = "Judul harus antara 3 dan 100 karakter")
// private String title;
// @NotNull(message = "Harga tidak boleh null")
// @DecimalMin(value = "0.0", inclusive = false, message = "Harga harus lebih besar dari 0")
// private Double price;
// // ... getter, setter
// }
// Di BookController.java
// import jakarta.validation.Valid;
// @PostMapping
// public ResponseEntity<?> createBook(@Valid @RequestBody Book book, BindingResult result) {
// if (result.hasErrors()) {
// // Tangani error validasi, misal kembalikan daftar error
// List<String> errors = result.getAllErrors().stream()
// .map(DefaultMessageSourceResolvable::getDefaultMessage)
// .collect(Collectors.toList());
// return ResponseEntity.badRequest().body(errors);
// }
// Book savedBook = bookService.save(book);
// return ResponseEntity.status(HttpStatus.CREATED).body(savedBook);
// }
Jika validasi gagal, Spring akan melempar MethodArgumentNotValidException
, yang bisa Anda tangani dengan @ExceptionHandler
atau @ControllerAdvice
untuk response error yang lebih baik.
5. Akses Data dengan Spring Data JPA
Spring Data JPA menyederhanakan interaksi dengan database relasional menggunakan Java Persistence API (JPA). Hibernate adalah implementasi JPA default yang digunakan Spring Boot.
A. Entity (@Entity
)
POJO (Plain Old Java Object) yang merepresentasikan tabel dalam database.
package com.example.myapp.model;
import jakarta.persistence.*; // atau javax.persistence.*
import java.time.LocalDateTime;
@Entity
@Table(name = "articles") // Opsional, jika nama tabel berbeda dari nama class
public class Article {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // ID di-generate oleh database
private Long id;
@Column(nullable = false, length = 200)
private String title;
@Lob // Untuk teks panjang
@Column(nullable = false, columnDefinition = "TEXT")
private String content;
private String author;
@Column(name = "publication_date")
private LocalDateTime publicationDate;
// Constructors, Getters, Setters, equals, hashCode, toString
// Lombok (@Data, @Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor) sangat membantu di sini
public Article() {}
public Article(String title, String content, String author) {
this.title = title;
this.content = content;
this.author = author;
this.publicationDate = LocalDateTime.now();
}
// ... getters and setters
}
Anotasi JPA seperti @Entity
, @Table
, @Id
, @GeneratedValue
, @Column
, @Lob
, @ManyToOne
, @OneToMany
, dll., digunakan untuk memetakan class dan field ke struktur database.
B. Repository Interface (JpaRepository
)
Anda hanya perlu mendefinisikan interface yang meng-extend JpaRepository<EntityType, IdType>
. Spring Data JPA akan secara otomatis menyediakan implementasi CRUD dan metode query lainnya saat runtime.
package com.example.myapp.repository;
import com.example.myapp.model.Article;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface ArticleRepository extends JpaRepository<Article, Long> {
// Metode CRUD dasar (save, findById, findAll, deleteById, dll.) sudah ada.
// Query method berdasarkan nama: Spring Data JPA akan meng-generate query
List<Article> findByAuthor(String author);
List<Article> findByTitleContainingIgnoreCase(String keyword);
List<Article> findByAuthorAndPublicationDateAfter(String author, LocalDateTime date);
// Query kustom menggunakan JPQL (Java Persistence Query Language)
@Query("SELECT a FROM Article a WHERE a.content LIKE %:searchTerm% ORDER BY a.publicationDate DESC")
List<Article> searchByContent(@Param("searchTerm") String searchTerm);
// Query native (jika diperlukan, tapi usahakan hindari untuk portabilitas)
// @Query(value = "SELECT * FROM articles WHERE author = ?1", nativeQuery = true)
// List<Article> findByAuthorNative(String author);
}
- Query Methods: Spring Data JPA dapat secara otomatis membuat query berdasarkan nama metode di interface repository Anda (misalnya,
findByAuthor
akan mencari artikel berdasarkan fieldauthor
). @Query
: Untuk query JPQL atau SQL native yang lebih kompleks.
C. Konfigurasi DataSource dan JPA
Dilakukan di application.properties
atau application.yml
. Spring Boot auto-configuration akan menangani pembuatan DataSource
, EntityManagerFactory
, dan PlatformTransactionManager
beans.
# application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/blogdb
spring.datasource.username=blogger
spring.datasource.password=secret
spring.datasource.driver-class-name=org.postgresql.Driver
spring.jpa.hibernate.ddl-auto=update # Hati-hati di produksi! 'validate' atau 'none' lebih aman.
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto
:
create
: Buat skema, hapus data yang ada jika tabel sudah ada.create-drop
: Buat skema saat startup, hapus saat shutdown. Berguna untuk tes.update
: Perbarui skema jika ada perbedaan antara entity dan tabel. Bisa berbahaya di produksi jika ada perubahan skema yang merusak.validate
: Validasi skema saat startup, error jika tidak cocok.none
: Jangan lakukan apa-apa terhadap skema. Skema dikelola secara manual atau dengan alat migrasi seperti Flyway atau Liquibase. Pilihan terbaik untuk produksi.
6. Spring Boot Actuator: Mengintip Jantung Aplikasi Anda
Spring Boot Actuator (spring-boot-starter-actuator
) adalah fitur krusial untuk aplikasi siap produksi. Ia menyediakan berbagai HTTP endpoint (atau JMX MBeans) untuk memonitor dan mengelola aplikasi Anda.
- Endpoint Umum (default di
/actuator
):/actuator/health
: Memberikan status kesehatan aplikasi (UP, DOWN, OUT_OF_SERVICE). Bisa dikustomisasi denganHealthIndicator
./actuator/info
: Menampilkan informasi aplikasi kustom (dariinfo.*
properties atauInfoContributor
beans)./actuator/metrics
: Menyediakan berbagai metrik (penggunaan JVM, request HTTP, status datasource, dll.). Bisa diekspor ke sistem monitoring seperti Prometheus./actuator/env
: Menampilkan properti environment Spring./actuator/loggers
: Melihat dan mengubah level logging secara runtime./actuator/beans
: Daftar semua Spring beans dalam konteks aplikasi./actuator/mappings
: Menampilkan semua pemetaan URL dari Spring MVC./actuator/configprops
: Menampilkan semua@ConfigurationProperties
beans dan propertinya./actuator/threaddump
: Melakukan thread dump JVM./actuator/heapdump
: Menghasilkan heap dump (file HPROF).
- Keamanan Endpoint: Banyak endpoint Actuator (terutama yang menampilkan informasi sensitif atau memungkinkan perubahan) diamankan secara default. Anda perlu mengkonfigurasi mana yang ingin diekspos dan bagaimana cara mengamankannya (biasanya melalui Spring Security).
# application.properties # Mengekspos semua endpoint via web (hati-hati di produksi!) management.endpoints.web.exposure.include=* # Mengekspos hanya health dan info # management.endpoints.web.exposure.include=health,info # Mengubah base path Actuator # management.endpoints.web.base-path=/manage
7. Profil dan Konfigurasi Eksternal: Adaptasi untuk Berbagai Lingkungan
Aplikasi perlu berperilaku berbeda di lingkungan development, testing, staging, dan production. Spring Boot menangani ini dengan sangat baik melalui profil dan konfigurasi eksternal.
- Profil: Cara untuk mengelompokkan konfigurasi. Anda bisa memiliki
application-dev.properties
,application-test.properties
,application-prod.properties
.- Aktifkan profil dengan properti
spring.profiles.active=dev,anotherprofile
atau environment variableSPRING_PROFILES_ACTIVE=dev
. - Jika profil
dev
aktif,application-dev.properties
akan dimuat setelahapplication.properties
, dan nilainya akan menimpa nilai dariapplication.properties
.
- Aktifkan profil dengan properti
- Sumber Konfigurasi Eksternal (dengan urutan prioritas dari tertinggi ke terendah):
- Devtools global settings.
@TestPropertySource
anotasi pada tes Anda.properties
atribut pada@SpringBootTest
.- Argumen command line (
java -jar app.jar --server.port=9000
). - Properti dari
SPRING_APPLICATION_JSON
(JSON inline yang disematkan di environment variable). - ServletConfig init parameters.
- ServletContext init parameters.
- JNDI attributes dari
java:comp/env
. - Java System properties (
System.getProperties()
). - OS environment variables.
- File
.properties
atau.yml
yang di-load oleh@PropertySource
(di luar JAR). - File konfigurasi spesifik profil di luar JAR (
application-{profile}.properties
atau.yml
). - File konfigurasi aplikasi di luar JAR (
application.properties
atau.yml
). - File konfigurasi spesifik profil di dalam JAR (classpath).
- File konfigurasi aplikasi di dalam JAR (classpath).
@PropertySource
anotasi pada@Configuration
class Anda.- Properti default (ditetapkan menggunakan
SpringApplication.setDefaultProperties
).
Ini memberikan fleksibilitas luar biasa untuk mengkonfigurasi aplikasi Anda di berbagai lingkungan tanpa mengubah kode.
8. Kesimpulan: Spring Boot – Fondasi Cepat dan Kokoh untuk Aplikasi Java Anda
Spring Boot telah secara signifikan mengubah lanskap pengembangan aplikasi Java enterprise. Dengan menyederhanakan konfigurasi, menyediakan starter dependensi yang cerdas, dan mempromosikan pendekatan “convention over configuration”, ia telah memberdayakan pengembang untuk membangun aplikasi yang tangguh dan siap produksi dengan kecepatan dan efisiensi yang belum pernah ada sebelumnya.
Kemampuannya untuk berintegrasi secara mulus dengan ekosistem Spring yang luas berarti Anda tidak kehilangan kekuatan dan fleksibilitas Spring Framework, melainkan mendapatkan cara yang jauh lebih mudah untuk memanfaatkannya. Baik Anda membangun microservices RESTful, aplikasi web full-stack, atau sistem backend yang kompleks, Spring Boot menyediakan fondasi yang solid, produktif, dan menyenangkan untuk dikerjakan. Dengan terus berinovasi dan didukung oleh komunitas yang besar, Spring Boot akan tetap menjadi pilihan utama bagi pengembang Java yang mencari solusi modern dan efisien.