Sunday, September 17, 2017

Optimasi Application Startup pada Aplikasi yang Memiliki Banyak Spring Batch Job

Hi Again, beberapa waktu lalu Nostra udah pernah sharing nih tentang Spring Batch yaitu tentang membaca database dan flat file. Pada kesempatan ini Nostra akan sharing sedikit tentang optimasi waktu (start up time) dari aplikasi yang memiliki banyak Spring Batch Job.

First of all, mari kita bahas gimana sih cara implementasi Spring Batch? Well sesuai dengan instruksi pada Spring.io, langkah paling mudah untuk mengimplementasikan Spring batch adalah dengan menggunakan Spring Boot dan menambahkan dependency sebagai berikut:
Selanjutnya kita perlu menambahkan configuration files untuk masing-masing Spring Batch Job, salah satu contohnya adalah sebagai berikut:
Kemudian jangan lupa untuk menambahkan @EnableBatchProcessing pada Application.java agar proses Spring Batch dapat berjalan.


Quick Facts
Tahukah anda bahwa @EnableBatchProcessing akan menjalankan seluruh Spring Batch Job pada Application Context sebelum Application Started? Tahukah anda bahwa itu akan berefek kepada lamanya proses Starting Application hingga siap digunakan? Tahukah anda apabila anda telah menyusun proses Spring Batch yang akan berjalan sesuai dengan scheduler maka dapat dipastikan scheduler pasti akan berjalan ketika aplikasi dinyalakan?

Mungkin bagi sebagian aplikasi, Quick Facts tersebut bukanlah sebuah masalah tetapi belum tentu untuk sebagian aplikasi lainnya. Sesuai dengan judul, tulisan ini akan membahas bagaimana solusi dari masalah-masalah tersebut.

Solusinya adalah dengan menambahkan konfigurasi pada application.properties maupun application.yaml, sehingga Spring Batch Job tidak akan dijalankan pada waktu menyalakan aplikasi.
Kita dapat melakukannya dengan satu dari dua cara di atas. 

Oh iya Spring Batch juga bisa kita gunakan untuk melakukan inisialisasi data pada DB (database). Akan tetapi jika kita mengimplementasikan dua cara di atas, maka besar kemungkinan proses inisialisasi tersebut tidak berjalan sebagai semestinya.

Mari kita bahas satu per satu.
Solusi pertama akan membuat seluruh Spring Batch Job tidak dijalankan ketika menyalakan aplikasi, bagaimana melakukan proses inisialisasi DB? kita bisa mengakalinya dengan membuat sebuah class baru yang akan memanggil Spring Batch Jobs tersebut.
Mengapa kita menggunakan custom JobParameters? Nice question. The answer is hal tersebut diperlukan untuk menjalankan proses Spring Batch Job ketika job tersebut sudah pernah dijalankan sebelumnya. dengan adanya parameter berupa current time maka setiap Spring Batch Job yang dijalankan akan bersifat unik. Cara lain untuk membuat Spring Batch Job bisa dijalankan ketika sudah ada yang pernah completed adalah dengan menambahkan satu baris pada BatchConfiguration sepert ini.

Kembali ke pembahasan sebelumnya, sekarang mari kita bahas solusi kedua. Solusi kedua memungkinkan kita untuk memilih Job mana saja yang akan dijalankan ketika kita menyalakan aplikasi dengan catatan bahwa Job tersebut bisa dijalankan (dapat dijalankan ketika job yang sama sudah pernah berjalan sebelumnya).

Okay folks, sekian dulu sharingnya tentang optimasi Spring Batch ini. Goodluck!


References:
o http://blog.nostratech.com/2017/03/spring-batch-reading-from-database.html
o http://blog.nostratech.com/2017/03/spring-batch-reading-from-flatfile.html
o http://projects.spring.io/spring-batch/
o https://docs.spring.io/spring-batch/reference/htmlsingle/#domainJob
o https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html






No comments:

Post a Comment