09 March 2009

Mengakses Property File Menggunakan Spring Framework

Jika dalam posting artikel di blog ini beberapa waktu yang lalu kita mencoba menggunakan property file untuk mengakses database dengan tujuan menghindari mekanisme hardcode, dan pengaksesan property file itu menggunakan sebuah class yang bernama ConfigProperties, kali ini kita akan mencoba mengakses property file tanpa menggunakan class tersebut, melainkan menggunakan Spring Framework.

Seperti yang sama-sama telah kita ketahui, kehadiran Spring Framework dalam teknologi Java benar-benar sangat membantu bagi kita para developer Java. Modularnya framework tersebut membuat development project-project Java yang berskala Enterprise menjadi lebih mudah untuk di kembangkan kembali.

Kita tidak akan membahas lebih banyak tentang kehebatan framework tersebut disini, kita hanya akan mencoba menggunakan framework tersebut untuk mengakses property file. Tentu saja nantinya nilai-nilai dalam property file ini bisa kita gunakan dalam rangkaian aplikasi-aplikasi kita yang lain nantinya.

Mari kita langsung melakukan percobaan kita ini. Dalam Spring Framework penggunaan bean menjadi suatu keharusan, oleh karena itu kita akan membuat sebuah object sebagai representasi dari bean, skenario yang akan kita buat adalah setiap item yang ada dalam property file akan menjadi property object yang kita buat. Kita misalkan saja item-item dalam property file seperti dibawah ini:

File application.properties

application.name=mojo
application.password=mojo123
application.url=http://localhost:8080/test_doang/test.jsp

File ini kita letakkan pada lokasi didalam folder config sejajar dengan folder src, seperti gambar berikut ini:

Dari isi file property tersebut kita akan membuat sebuah object Java pojo sederhana yang mewakili setiap item yang ada dalam property file diatas. Source code object tersebut seperti dibawah ini:

File PropertyHolder.java



package org.mojo.spring.entity;
/**
* Created by IntelliJ IDEA.
* User: Mojo
* Date: Mar 9, 2009
* Time: 7:04:46 PM
* To change this template use File | Settings | File Templates.
*/
public class PropertyHolder {
private String name;
private String password;
private String url;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUrl() {
return url;
}

public void setUrl(String url) {
this.url = url;
}

public String toString() {
return "PropertyHolder{" +
"name='" + name + '\'' +
", password='" + password + '\'' +
", url='" + url + '\'' +
'}';
}
}

Pada source code di atas kita membuat sebuah file bernama PropertyHolder.java. Dalam file ini kita memang hanya membuat tiga property object saja, karena memang cuma tiga item saja yang ada dalam property file tsb. Setiap property object ini nantinya akan memegang value yang ada pada property file tsb.

Untuk membuat agar setiap item dalam property file itu bisa di masukkan ke dalam masing-masing property dari object, kita harus mendefinisikan object tersebut dalam file konfigurasi Spring, sehingga ketika aplikasi pertama kali akan dijalankan maka file konfigurasi Spring ini akan di panggil dan akhirnya semua item yang ada dalam property file tersebut bisa masuk dalam object PropertyHolder yang sudah kita buat sebelumnya tadi. Di bawah ini adalah definisi object yang kita jadikan sebagai sebuah bean dalam file konfigurasi Spring, file ini juga kita letakkan di dalam folder yang sama dengan folder property file berada yaitu pada folder config.

File applicationContext-app.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="config/application.properties"/>
</bean>

<!-- Local Data Holder -->
<bean id="propertyHolder" class="org.mojo.spring.entity.PropertyHolder">
<property name="name" value="${application.name}"/>
<property name="password" value="${application.password}"/>
<property name="url" value="${application.url}"/>
</bean>
</beans>

Pada dasarnya ketika sebuah aplikasi yang menggunakan Spring Framework mulai di jalankan, maka semua bean yang di definisikan didalam konfigurasi Spring ini akan turut pula di panggil satu demi satu, meski mungkin saja satu bean akan bergantung terhadap bean lain. Pada bean yang kita definisikan di atas kita melihat, kita mendefinisikan dua bean disana, dimana bean pertama diberi id “propertyConfigurer yang berfungsi memberi informasi kepada Spring Framework dimana letak property file berada, sementara bean lainnya yang kita beri id ”propertyHolder” merupakan mapping object yang telah kita buat tadi, perhatikan definisi class yang ada pada bean kedua, kemudian masing-masing property yang ada dalam blok bean tersebut disanalah mapping item-item yang ada pada property file ke masing-masing property yang ada di dalam object.

Disinilah sebenarnya inti dari percobaan kita kali ini, beginilah cara kita untuk mengakses item-item yang ada pada property file dengan menggunakan Spring Framework. Dan ketika kita ingin menggunakan item-item yang ada pada property file tersebut kita tinggal memanggil saja object PropertyHolder tersebut dalam aplikasi kita, setelah sebelumnya kita mengeset object PropertyHolder tersebut tentunya. Penggunaannya seperti contoh dibawah ini:

package org.mojo.spring.application;

import org.mojo.spring.entity.PropertyHolder;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
* Created by IntelliJ IDEA.
* User: Mojo
* Date: Mar 9, 2009
* Time: 7:06:35 PM
* To change this template use File | Settings | File Templates.
*/
public class TestReadProperty {
private PropertyHolder holder =null;

public void setHolder(PropertyHolder holder) {
this.holder = holder;
}

public static void main(String[] args) {
ApplicationContext context = new FileSystemXmlApplicationContext("config/applicationContext-app.xml");
TestReadProperty app = new TestReadProperty();
app.setHolder((PropertyHolder) context.getBean("propertyHolder"));


System.out.println("Name : " + app.holder.getName());
System.out.println("Password : " + app.holder.getPassword());
System.out.println("Url : " + app.holder.getUrl());
System.out.println("full : " + app.holder);
}
}

Pada contoh penggunaan pada source code diatas bisa kita jabarkan seperti dibawah ini:

Pertama-tama Object PropetyHolder di definisikan menjadi sebuah private variable dengan nama variabel holder. Kemudian ada satu method yang berfungsi sebagai setter dari object tersebut. Dan kemudian pada method utama contoh program tersebut kita mendefinisikan object ApplicationContext yang memanggil konfigurasi Spring Framework, dan kita juga harus mendefinisikan program ini sebagai sebuah object pada baris berikutnya, agar semua property yang ada pada program ini bisa di panggil didalam method utama.

Langkah selanjutnya kita mengeset object PropertyHolder dengan cara memanggil method setter PropertyHolder yang ada dalam program ini. Pada saat baris ini dipanggil maka secara otomatis Spring Framework akan memuat semua value yang ada pada item-item property file ke dalam object PropertyHolder. Dan yang terakhir adalah kita coba mem-print-out isi dari masing-masing property object PropertyHolder ke atas console. Dan jangan lupa untuk mengimport semua class-class yang kita butuhkan pada baris paling atas dari program ini.

Demikianlah percobaan kita kali ini, sebuah percobaan kecil yang memanfaatkan salah satu fitur dari Spring Framework yang memang mempunyai begitu banyak fitur yang bisa kita gunakan dalam pengembangan aplikasi kita. Dan jika anda ingin mencobanya jangan lupa untuk men-download library Spring dan juga library-library lainnya yang memang menjadi dependency library bagi Spring Framework itu sendiri.

Selamat mencoba….!!!


Semoga bermanfaat.

Menteng, 9 Maret 2009

Josescalia


4 comments:

Anonymous said...

Ok juga tutorialnya om, klw misalnya kita ingin merubah database pada saat runtime dimana setingnya?. Contoh di server ada dua database utk OPERATIONAL, dan TEST, lalu pada saat aplikasi di run akan menampilkan pilihan utk menggunakan database operasional atau test. jadi kita gak perlu ubah lagi di file application.properties.

Terima kasih

JoseScalia said...

Hmm..Creative One Suggestion...

Kalo menurut saya, harus ada bridge-nya...jadi sebelum aplikasi utama dijalankan ada menu pilih database, nah action dari pemilihan database itu akan berujung pada modifikasi file properties, kita bisa menggunakan function java.io disini, untuk men-save atau mengupdate item-item dalam properties file, sesudah itu baru deh aplikasi utamanya di eksekusi...

BTW
Terima kasih telah mengunjungi blog ini...

mbahsomo said...

Wah hebat Mas, Boleh nih daftar jadi salah satu santrinya :D

Anonymous said...

Artikel IntelliJ IDEA nya dong mas ^_^