Skip to main content

Bikin Blog Dengan Spring Boot dan Kotlin

This Pada catatan teknis ini mencatat tentang bagaimana membuat aplikasi web blog  sederhana yang dibuat dengan dukungan dari teknologi Spring Boot and Kotlin.

Jika kamu baru mengenal kotlin Kotlin, kamu bisa belajar bahasa pemrograman ini dari halaman reference documentation, tutorial online di Kotlin Koans tutorial atau langsung menggunakan Spring Framework reference documentation yang juga memberikan contoh kode-kode Kotlin.

Dukungan dokumentasi dan referensi untuk Spring dan Kotlin tersedia pada halaman Spring Framework dan Spring Boot. Jika anda memerlukan bantuan, silahkan cari jawaban atau bertanya di spring dan kotlin tags di StackOverflow atau diskusi langsung di channel #spring  pada Kotlin Slack.

Membuat Project Baru

Pertamatama kita perlu membuat aplikasi Spring Boot terlebih dahulu, dari beberapa cara cara termudah adalah menggunakan Spring  Initializr.

Kunjungi halaman Spring  Initializr  https://start.spring.io dan pilih Kotlin ubtuk bahasa pemrograman. Gradle adalah build tool yang umum digunakan dalam project Kotlin, dan  ini menyediakan Kotlin DSL yang mana secara default digunakan ketika membuat sebuah project Kotlin, maka pilihan ini bisa dibilang adalah pilihan yang direkomendasikan. Tapi kita juga bisa memilih Maven jika memang lebih nyaman dengan Maven. Kita bisa membuka halaman Spring  Initializr dengan URL berikut https://start.spring.io/#!language=kotlin&type=gradle-project untuk memilih Kotlin and Gradle secara default.

  1. Pilih "Gradle Project"

  2. Enter the following artifact coordinates: blog

  3. Tambahkan dependencies berikut ini:

    • Spring Web

    • Mustache

    • Spring Data JPA

    • H2 Database

    • Spring Boot DevTools

  4. Klik "Generate Project".

 Halaman Spring  Initializr. 

FIle .zip berisi project standard Spring Boot dan Kotlin setelah di extract.


Membuka Project di Intellij IDEA

Buka folder dari hasil extrak .zip

Trust Project.

Proses download segala kebutuhan project.

Project siap untuk digunakan.

Jalankan Project di Intellij IDEA

Klik button play hijau atau CTRL+F10

Setup Database Project 


Spring error karena belum ada koneksi ke database.

Cek koneksi ke MySQL database yang berada di lokal.

Koneksi database di docker saya.

Berhasil login ke MySQL CLI  

Koneksi ke database.

Tambahkan lines berikut pada file resources/application.properties
spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:127.0.0.1}:3306/weblog
spring.datasource.username=springuser spring.datasource.password=ThePassword spring.datasource.driver-class-name =com.mysql.jdbc.Driver #spring.jpa.show-sql: true
Setelah perubahan diatas kembali jalankan project.
Console

Spring Kotlin berjalan di atas browser (abaikan error)


Penjelasan Hal di Atas


/blog/weblog/src/main/kotlin/com/yusuf/weblog/WeblogApplication.kt

package com.yusuf.weblog

import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.runApplication

@SpringBootApplication
class WeblogApplication

fun main(args: Array<String>) {
  runApplication<WeblogApplication>(*args)
}

Dibandingkan dengan Java, perbedaan yang paling mencolok adalah tiadanya semicolons dan kelas kosong tidak perlu memiliki  brackets. runApplication<BlogApplication>(*args) adalah idiom milik Kotlin untuk SpringApplication.run(BlogApplication::class.java, *args) adan bisadigunakan untuk melakukan customize  aplikasi seperti berikut;

src/main/kotlin/com/yusuf/weblog/WeblogApplication.kt

fun main(args: Array<String>) {
  runApplication<WeblogApplication>(*args) {
setBannerMode(Banner.Mode.OFF) } }

Membuat Kotlin Controller


src/main/kotlin/com/yusuf/weblog/HomeController.kt

package com.yusuf.weblog
import org.springframework.stereotype.Controller import org.springframework.ui.Model import org.springframework.ui.set import org.springframework.web.bind.annotation.GetMapping @Controller class HomeController { @GetMapping("/") fun home(model: Model): String {
model["title"] = "Blog Home Index"
return "home"
} }

Perlu dicatat disini bahwa kita menggunakan Kotlin extension yang membuat kita dapat menggunakan Kotlin functions atau operators pada berbagai Spring types yang ada. Disini sebalumnya kita telah import  org.springframework.ui.set ektensi yang memungkinakan kita menulis kode lebih simple seperti  model["title"] = "Blog Home Index" bandingkan dengan menulis model.addAttribute("title", "Blog")Spring Framework KDoc API memberikan fasilitas Kotlin extensions yang memperkaya si Java API itu sendiri.

Selanjutnya kita perlu membuat 3 files untuk templates Mustache.

src/main/resources/templates/footer.mustache
<html>
<head>
  <title>{{title}}</title>
</head>
<body>

src/main/resources/templates/header.mustache
</body>
</html>

src/main/resources/templates/home.mustache

{{> header}}

<h1>{{title}}</h1>

{{> footer}}

Hasil di Browser

http://localhost:8080/


Referensi dan sumber belajar

https://spring.io/guides/tutorials/spring-boot-kotlin/

https://spring.io/guides/gs/accessing-data-mysql/


Comments

Popular posts from this blog

Numpang Kerja Remote dari Bandung Creative Hub

Semalam kemarin (09 Januari 2019) tidak sengaja kami sekeluarga lewat Bandung Digital Hub saat pulang dari Fish Wow Cheeseee  yang di Jl. Lombok. Bandung Digital Hub ini sendiri berlokasi tidak jauh dari dari tempat kami makan tersebut, yaitu berlokasi di Jl. Laswi No.7, Kacapiring, Batununggal, Kota Bandung, Jawa Barat 40271. Berhubung untuk bulan Januari 2019 ini sedang tidak masuk ke kantor maka saya putuskan untuk besoknya (hari ini 09 Januari 2019) nyoba untuk bekerja remote dari Bandung Digital Hub , apalagi istri yang kebetulan follower pak Ridwan Kamil di Instagram juga Facebook dan tampaknya pernah lihat ulasan mengenai tempat ini sehingga tampak antusias supaya saya datang ketempat ini ini dan mencoba bekerja dari gedung creative hub dan coworking yang keren ini.  Tempat Parkir Masalah utama saat kita datang ke coworking space terutama yang berlokasi di Bandung (atau mungkin kota-kota lainnya) adalah lahan parkir, kadang lahan parkir ...

Numpang Kerja Remote dari Bandung Digital Valley

Satu lagi co-working place  gratisan dan keren yang cukup populer dikota Bandung, co-working place yang juga memberikan fasilitas tempat kerja (co-working place) dan fitur-fitur menarik lainnya,  co-working place keren  ini adalah Bandung Digital Valley atau yang sering disingkat BDV . C o-working place  Bandung Digital Valley ini  merupakan bagian dari Telkom , mulai aktif digunakan dari sekitar tahun 2012 lalu .  Tempat ini biasanya menjadi tempat favorit bagi para pengiat startup, freelancer, dan mahasiswa . Gedung BDV Gedung BDV Gedung BDV Co-working space Bandung Digital Valley ini sendiri berlokasi di Menara Bandung Digital Valley, Jl. Gegerkalong Hilir No.47, Sukarasa, Sukasari, Kota Bandung, Jawa Barat, detailnya bisa dilihat di Google map berikut. Pemandangan jalan setelah pintu satpam. Free Co-working Space Membership Untuk mulai menggunakan fasilitas co-working space ini secara gratis maka yang pe...

Membuat Authentikasi Berbasis Token pada Spring Boot dengan Spring Security dan JWT

Setelah beberapa kali mencari tutorial tentang otentikasi aplikasi web Spring Boot dengan menggunakan JWT yang mudah dipahami akhirnya saya menemukan artikel berbahasa Inggris tapi sangat mudah dipahami  dan diikuti, artikel tersbut berada disini , dengan judul " Spring Boot Token based Authentication with Spring Security & JWT ". Untuk memudahkan orang-orang yang terbiasa membaca artikel dalam bahasa indonesia (termasuk saya sendiri), artikel ini saya buat dan susun ulang (artikel aslinya tidak tertulis dengan runtut dan dapat membuat pemula bingung dengan berbagai error yang muncul) supaya lebih mudah untuk diikuti dan dapat di gunakan bersama. Applikasi yang akan kita buat adalah aplikasi web yang setiap endpoint-nya hanya bisa di akses oleh role tertentu. 1. Tools Yang Diperlukan IntelliJ Idea text editor. Spring Assistant Plugin. Postman. PostgreSQL + DBeaver. Min Java 8 Spring Boot 2.1.8 (dengan Spring Security, Spring Web, Spring Data JPA). jjwt 0.9.1. Maven 3.6.1....