Panduan Lengkap Spring 6 dan Spring Boot 3: 7 Proyek Efektif

Temukan panduan lengkap Spring 6 dan Spring Boot 3 dengan 7 proyek efektif! Pelajari cara mempercepat pengembangan aplikasi Anda. Klik untuk informasi lebih lanjut!

By WGS INDONESIA
4.9/4.9
Indonesia
Rp 43,750.00 GRATIS
E-COURSE banner with text and icons representing Artificial Intelligence and video learning

Detail Pembelajaran

Panduan Lengkap Spring 6 dan Spring Boot 3: 7 Proyek Efektif
  • Spring 6, Spring Boot 3, Panduan Lengkap, Proyek Efektif, Pengembangan Perangkat Lunak

Baca Online

Panduan Lengkap Spring 6 dan Spring Boot 3: 7 Proyek Efektif

Daftar Isi

  1. Pengantar Spring 6 dan Spring Boot 3
  2. Persiapan Lingkungan dan Tools
  3. Proyek 1: Aplikasi RESTful API Sederhana
  4. Proyek 2: CRUD dengan Spring Data JPA
  5. Proyek 3: Autentikasi dan Otorisasi dengan Spring Security
  6. Proyek 4: Upload dan Download File
  7. Proyek 5: Integrasi dengan Database NoSQL (MongoDB)
  8. Proyek 6: Pengiriman Email Otomatis
  9. Proyek 7: Deployment dan Monitoring Aplikasi
  10. Sumber Belajar dan Source Code

Pengantar Spring 6 dan Spring Boot 3

Spring Framework adalah salah satu framework paling populer untuk pengembangan aplikasi Java. Versi terbaru, Spring 6, membawa banyak peningkatan performa dan dukungan untuk Java 17+. Spring Boot 3 memudahkan pengembangan aplikasi dengan konfigurasi minimal dan integrasi yang kuat.

Dalam ebook ini, Anda akan belajar langkah demi langkah membangun 7 proyek efektif menggunakan Spring 6 dan Spring Boot 3, mulai dari aplikasi RESTful sederhana hingga deployment dan monitoring.

Ilustrasi logo Spring Framework 6 dan Spring Boot 3 dengan ikon kode dan server

Persiapan Lingkungan dan Tools

Sebelum memulai, pastikan Anda sudah menyiapkan beberapa tools berikut:

  • Java Development Kit (JDK) versi 17 atau lebih baru
  • IDE favorit seperti IntelliJ IDEA, Eclipse, atau VS Code
  • Maven atau Gradle sebagai build tool
  • Postman atau Insomnia untuk testing API
  • Database seperti MySQL, PostgreSQL, atau MongoDB (tergantung proyek)

Anda juga bisa menggunakan Spring Initializr ( https://start.spring.io ) untuk membuat proyek Spring Boot dengan cepat.

Ilustrasi setup lingkungan pengembangan dengan laptop, kode, dan ikon tools seperti JDK, IDE, dan database

Proyek 1: Aplikasi RESTful API Sederhana

Pada proyek pertama ini, kita akan membuat aplikasi RESTful API sederhana menggunakan Spring Boot 3 yang menyediakan endpoint untuk menampilkan daftar buku.

Langkah 1: Membuat Proyek Spring Boot

Gunakan Spring Initializr dengan konfigurasi berikut:

  • Project: Maven Project
  • Language: Java
  • Spring Boot: 3.x.x
  • Dependencies: Spring Web

Langkah 2: Membuat Model Buku

package com.example.demo.model;

public class Book {
    private Long id;
    private String title;
    private String author;

    public Book() {}

    public Book(Long id, String title, String author) {
        this.id = id;
        this.title = title;
        this.author = author;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

      

Langkah 3: Membuat Controller

package com.example.demo.controller;

import com.example.demo.model.Book;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class BookController {

    @GetMapping("/books")
    public List getBooks() {
        return List.of(
            new Book(1L, "Spring in Action", "Craig Walls"),
            new Book(2L, "Pro Spring Boot 3", "Felipe Gutierrez"),
            new Book(3L, "Spring Microservices", "Rajesh RV")
        );
    }
}

      

Langkah 4: Menjalankan dan Menguji API

Jalankan aplikasi dan akses http://localhost:8080/books menggunakan browser atau Postman. Anda akan mendapatkan daftar buku dalam format JSON.

Tampilan respons JSON dari endpoint /books yang menampilkan daftar buku dengan judul dan penulis

Proyek 2: CRUD dengan Spring Data JPA

Pada proyek ini, kita akan membuat aplikasi CRUD (Create, Read, Update, Delete) menggunakan Spring Data JPA dan database H2 untuk manajemen data buku.

Langkah 1: Tambahkan Dependencies

Tambahkan dependencies berikut di pom.xml :

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <scope>runtime</scope>
</dependency>

      

Langkah 2: Konfigurasi application.properties

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update

      

Langkah 3: Buat Entity Book

package com.example.demo.entity;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Book {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String title;
    private String author;

    public Book() {}

    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // getters and setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

      

Langkah 4: Buat Repository

package com.example.demo.repository;

import com.example.demo.entity.Book;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BookRepository extends JpaRepository<Book, Long> {
}

      

Langkah 5: Buat Controller CRUD

package com.example.demo.controller;

import com.example.demo.entity.Book;
import com.example.demo.repository.BookRepository;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/books")
public class BookController {

    private final BookRepository bookRepository;

    public BookController(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @GetMapping
    public List<Book> getAllBooks() {
        return bookRepository.findAll();
    }

    @PostMapping
    public Book createBook(@RequestBody Book book) {
        return bookRepository.save(book);
    }

    @GetMapping("/{id}")
    public ResponseEntity<Book> getBookById(@PathVariable Long id) {
        return bookRepository.findById(id)
            .map(ResponseEntity::ok)
            .orElse(ResponseEntity.notFound().build());
    }

    @PutMapping("/{id}")
    public ResponseEntity<Book> updateBook(@PathVariable Long id, @RequestBody Book bookDetails) {
        return bookRepository.findById(id)
            .map(book -> {
                book.setTitle(bookDetails.getTitle());
                book.setAuthor(bookDetails.getAuthor());
                Book updated = bookRepository.save(book);
                return ResponseEntity.ok(updated);
            }).orElse(ResponseEntity.notFound().build());
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteBook(@PathVariable Long id) {
        return bookRepository.findById(id)
            .map(book -> {
                bookRepository.delete(book);
                return ResponseEntity.noContent().build();
            }).orElse(ResponseEntity.notFound().build());
    }
}

      

Langkah 6: Testing CRUD API

Gunakan Postman untuk menguji endpoint:

  • GET /api/books - Mendapatkan semua buku
  • POST /api/books - Menambah buku baru (body JSON dengan title dan author)
  • GET /api/books/{id} - Mendapatkan buku berdasarkan ID
  • PUT /api/books/{id} - Mengupdate buku berdasarkan ID
  • DELETE /api/books/{id} - Menghapus buku berdasarkan ID
Tampilan aplikasi Postman dengan request dan response CRUD API Spring Boot

Proyek 3: Autentikasi dan Otorisasi dengan Spring Security

Pada proyek ini, kita akan menambahkan fitur autentikasi dan otorisasi menggunakan Spring Security untuk mengamankan endpoint aplikasi.

Langkah 1: Tambahkan Dependency Spring Security

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-security</artifactId>
</dependency>

      

Langkah 2: Konfigurasi Security

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .csrf().disable()
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .anyRequest().authenticated()
            )
            .httpBasic();
        return http.build();
    }
}

      

Langkah 3: Menambahkan User Detail Service Sederhana

package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;

@Configuration
public class UserConfig {

    @Bean
    public UserDetailsService userDetailsService() {
        var user = User.withDefaultPasswordEncoder()
            .username("user")
            .password("password")
            .roles("USER")
            .build();

        return new InMemoryUserDetailsManager(user);
    }
}

      

Langkah 4: Membuat Endpoint Public dan Private

package com.example.demo.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @GetMapping("/public/hello")
    public String publicHello() {
        return "Hello, this is a public endpoint!";
    }

    @GetMapping("/private/hello")
    public String privateHello() {
        return "Hello, this is a secured endpoint!";
    }
}

      

Langkah 5: Testing Autentikasi

Akses /public/hello tanpa autentikasi, dan /private/hello dengan username user dan password password .

Tampilan login prompt HTTP Basic Authentication dan respons endpoint yang diamankan

Proyek 4: Upload dan Download File

Pada proyek ini, kita akan membuat fitur upload dan download file menggunakan Spring Boot.

Langkah 1: Buat Controller untuk Upload dan Download

package com.example.demo.controller;

import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.net.MalformedURLException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

@RestController
@RequestMapping("/files")
public class FileController {

    private final Path storageLocation = Paths.get("uploads");

    public FileController() throws Exception {
        Files.createDirectories(storageLocation);
    }

    @PostMapping("/upload")
    public String uploadFile(@RequestParam("file") MultipartFile file) throws Exception {
        Path targetLocation = storageLocation.resolve(file.getOriginalFilename());
        Files.copy(file.getInputStream(), targetLocation);
        return "File uploaded: " + file.getOriginalFilename();
    }

    @GetMapping("/download/{filename}")
    public ResponseEntity<Resource> downloadFile(@PathVariable String filename) throws MalformedURLException {
        Path filePath = storageLocation.resolve(filename).normalize();
        Resource resource = new UrlResource(filePath.toUri());

        if (!resource.exists()) {
            return ResponseEntity.notFound().build();
        }

        String contentType = "application/octet-stream";

        return ResponseEntity.ok()
            .contentType(MediaType.parseMediaType(contentType))
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + resource.getFilename() + "\"")
            .body(resource);
    }
}

      

Langkah 2: Testing Upload dan Download

Gunakan Postman untuk mengirim file ke endpoint POST /files/upload dan unduh file dengan GET /files/download/{filename} .

Tampilan Postman untuk upload file dan download file dari server Spring Boot

Proyek 5: Integrasi dengan Database NoSQL (MongoDB)

Pada proyek ini, kita akan menggunakan MongoDB sebagai database NoSQL dan mengintegrasikannya dengan Spring Boot.

Langkah 1: Tambahkan Dependencies MongoDB

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

      

Langkah 2: Konfigurasi application.properties

spring.data.mongodb.uri=mongodb://localhost:27017/springbootdb

      

Langkah 3: Buat Entity dan Repository

package com.example.demo.model;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "books")
public class Book {

    @Id
    private String id;

    private String title;
    private String author;

    public Book() {}

    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // getters and setters
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }
}

      
package com.example.demo.repository;

import com.example.demo.model.Book;
import org.springframework.data.mongodb.repository.MongoRepository;

public interface BookRepository extends MongoRepository<Book, String> {
}

      

Langkah 4: Buat Controller CRUD MongoDB

package com.example.demo.controller;

import com.example.demo.model.Book;
import com.example.demo.repository.BookRepository;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/mongo/books")
public class BookMongoController {

    private final BookRepository bookRepository;

    public BookMongoController(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    @GetMapping
    public List<Book> getAllBooks() {
        return bookRepository.findAll();
    }

    @PostMapping
    public Book createBook(@RequestBody Book book) {
        return bookRepository.save(book);
    }

    @GetMapping("/{id}")
    public ResponseEntity<Book> getBookById(@PathVariable String id) {
        return bookRepository.findById(id)
            .map(ResponseEntity::ok)
            .orElse(ResponseEntity.notFound().build());
    }

    @PutMapping("/{id}")
    public ResponseEntity<Book> updateBook(@PathVariable String id, @RequestBody Book bookDetails) {
        return bookRepository.findById(id)
            .map(book -> {
                book.setTitle(bookDetails.getTitle());
                book.setAuthor(bookDetails.getAuthor());
                Book updated = bookRepository.save(book);
                return ResponseEntity.ok(updated);
            }).orElse(ResponseEntity.notFound().build());
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteBook(@PathVariable String id) {
        return bookRepository.findById(id)
            .map(book -> {
                bookRepository.delete(book);
                return ResponseEntity.noContent().build();
            }).orElse(ResponseEntity.notFound().build());
    }
}

      

Langkah 5: Testing MongoDB CRUD

Pastikan MongoDB berjalan di localhost:27017, lalu gunakan Postman untuk menguji endpoint CRUD di /mongo/books .

Tampilan Postman untuk menguji CRUD API dengan MongoDB di Spring Boot

Proyek 6: Pengiriman Email Otomatis

Pada proyek ini, kita akan mengirim email otomatis menggunakan Spring Boot dan JavaMailSender.

Langkah 1: Tambahkan Dependency Spring Boot Starter Mail

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

      

Langkah 2: Konfigurasi application.properties

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-app-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

      

Langkah 3: Buat Service Pengiriman Email

package com.example.demo.service;

import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

@Service
public class EmailService {

    private final JavaMailSender mailSender;

    public EmailService(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendSimpleEmail(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom("your-email@gmail.com");
        message.setTo(to);
        message.setSubject(subject);
        message.setText(text);
        mailSender.send(message);
    }
}

      

Langkah 4: Buat Controller untuk Mengirim Email

package com.example.demo.controller;

import com.example.demo.service.EmailService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmailController {

    private final EmailService emailService;

    public EmailController(EmailService emailService) {
        this.emailService = emailService;
    }

    @PostMapping("/send-email")
    public String sendEmail(
        @RequestParam String to,
        @RequestParam String subject,
        @RequestParam String body) {

        emailService.sendSimpleEmail(to, subject, body);
        return "Email sent to " + to;
    }
}

      

Langkah 5: Testing Pengiriman Email

Gunakan Postman untuk mengirim request POST ke /send-email dengan parameter to , subject , dan body .

Tampilan Postman untuk mengirim email menggunakan Spring Boot dan JavaMailSender

Proyek 7: Deployment dan Monitoring Aplikasi

Pada proyek terakhir ini, kita akan membahas cara deployment aplikasi Spring Boot dan monitoring performa menggunakan Actuator.

Langkah 1: Tambahkan Dependency Spring Boot Actuator

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

      

Langkah 2: Konfigurasi application.properties

management.endpoints.web.exposure.include=health,info,metrics,httptrace

      

Langkah 3: Menjalankan Aplikasi dan Mengakses Endpoint Actuator

Jalankan aplikasi dan akses endpoint berikut:

  • /actuator/health - Status kesehatan aplikasi
  • /actuator/info - Informasi aplikasi
  • /actuator/metrics - Statistik performa
  • /actuator/httptrace - Trace HTTP request
Tampilan dashboard monitoring Spring Boot Actuator dengan status health dan metrics

Langkah 4: Deployment ke Heroku (Contoh)

Berikut langkah singkat deploy aplikasi ke Heroku:

  1. Install Heroku CLI dan login dengan heroku login
  2. Buat aplikasi baru dengan heroku create nama-aplikasi
  3. Push kode ke Heroku dengan git push heroku main
  4. Set konfigurasi environment jika perlu dengan heroku config:set
  5. Akses aplikasi melalui URL yang diberikan Heroku
Tampilan terminal dengan perintah deploy aplikasi Spring Boot ke Heroku

Sumber Belajar dan Source Code

Berikut beberapa sumber belajar dan repository source code yang bisa Anda gunakan untuk memperdalam pemahaman Spring 6 dan Spring Boot 3:

Ilustrasi buku, laptop, dan ikon video tutorial sebagai sumber belajar Spring Boot

Edukasi Terkait