Mengatur Spring Profile Untuk Embedded Jetty


Pada saat menjalankan aplikasi di dalam embedded Jetty dengan tujuan pengujian, kadang-kadang saya perlu mengubah profile Spring yang sedang aktif, misalnya dari dev menjadi test.  Sebagai contoh, ini adalah potongan web.xml aplikasi yang saya buat:

<context-param>
  <param-name>spring.profiles.active</param-name>
  <param-value>dev</param-value>
</context-param>

Pada saat menjalankan embedded Jetty, saya memberikan referensi ke web.xml ini, misalnya seperti berikut:

WebAppContext context = new WebAppContext();
context.setDescriptor("../FolderProyek/src/main/webapp/WEB-INF/web.xml");

Pertanyaannya adalah bagaimana mengubah nilai param spring.profiles.active dari dev menjadi test secara otomatis.  Yup, otomatis, karena tidak mungkin saya bisa dipaksa mengedit file web.xml secara manual setiap kali melakukan pengujian front-end (menjadi test) dan setiap kali menjalankan aplikasi secara normal (menjadi dev).

Sekilas terbersit bahwa Spring bisa membaca nilai profile yang aktif dari environment variable, sehingga harusnya saya bisa menambahkan System.setProperty(“spring.profiles.active”, “test”);  pada kode program di atas.  Sayangnya, hal seperti ini TIDAK bisa dilakukan, karena nilai pada web.xml yang dibaca akan MENIMPA nilai environment variable!!!

Lalu apa solusinya?  Saya harus memberitahukan pada Jetty bahwa nilai pada web.xml harus ditimpa oleh sesuatu nilai lain, misalnya dengan kode program berikut ini:

List<String> listOverrideDescriptors = new ArrayList<String>();
listOverrideDescriptors.add("override-web.xml");
context.setOverrideDescriptors(listOverrideDescriptors);

Pada kode program tersebut, saya harus menyediakan sebuah file override-web.xml yang berada dalam format yang sama seperti web.xml.  Bedanya, override-web.xml ini tidak perlu berisi seluruh definisi web.xml secara lengkap, melainkan hanya perlu menyertakan bagian yang akan diubah.  Sebagai contoh, untuk mengubah profile di Spring, isi override-web.xml saya adalah:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>test</param-value>
  </context-param>

</web-app>

Perihal Solid Snake
I'm nothing...

One Response to Mengatur Spring Profile Untuk Embedded Jetty

  1. Ping-balik: Melakukan Front-End Testing « The Solid Snake

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: