Java’ da Properties Dosyası ve Kullanımı

Bazen kod içerisine sürekli müdahale ederek değişiklik yapmaktansa tanımlı dosyada ilgili alanın değerini değiştirmek daha kolay olabilir. Örnek olarak; kod içerisinde veritabanı login veya web servisin endpoint bilgileri gibi önemli bilgiler yer alır. Bu bilgiler test ortamınızda ve canlı ortamda farklılık gösterebilr. Paketi test ortamından canlı ortamına aktarırken kod içerisine müdahele etmektense sadece config dosyasında tanımlı bilgiyi değiştirmeniz yeterli olacaktır. Bir başka örnek olarak; bir kod satırı, metot vb. işlem parçacığı var. Her zaman çalışmasını istemiyorsunuz. Config dosyasında flag yaparak kod öncesine if-else geçerek on/off şartları ile kontrol edebilirsiniz.

Gelelim config/properties dosyasını oluşturmaya.

Project folder- rightclick- new- other- properties file

 

Properties dosyasının içerisine kullanacağınız key/value bilgilerini ekleyiniz. Ben örnek olması açısından aşağıdaki gibi ekliyorum…

Properties dosyasına erişebilecek bir class oluşturalım. Ben adına GetConfig diyeceğim. Ulaşacağım metotları static tanımlayacağım. ki new object etmeden istediğim static metotlardan call edebileyim.

GetConfig.java

/**
*
*/
package com.services;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

/**
* @author muludag
*
*/
public class GetConfig {
// properties name yazilir.
private static final String BUNDLE_NAME = "settings";
//bundle edilmesi icin java.util paketinde ResourceBundle yapisi kullanilir.
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME);

private GetConfig() {
}

private static String getString(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
throw new RuntimeException("Unable to locate configuration property '" + key + "'");
}
}

public static String getLoginName(){
return getString("login.name");
}
public static String getPassword(){
return getString("login.password");
}
public static String getKey(){
return getString("key");
}
}

dummy yaptığım proje de örnek olması açısından bir login kontrolü yapan metot olsun. Aşağıdaki class Services.java

[code]

package com.services;

import org.apache.log4j.Logger;

public class Services {
static final String theKey = "on";
static Logger log = Logger.getLogger(Services.class);

public static boolean loginController(String username, String password) {
boolean returnFlag = false;

if (GetConfig.getKey().equals(theKey)) {
if (GetConfig.getLoginName().equals(username) && GetConfig.getPassword().equals(password)) {
log.info("login success");
returnFlag = true;
} else {
if (!GetConfig.getLoginName().equals(username) && !GetConfig.getLoginName().equals(password)) {
log.warn("username ve password hatali!");
}
else if (!GetConfig.getLoginName().equals(username)) {
log.warn("username hatali!");
}
else if (!GetConfig.getLoginName().equals(password)) {
log.warn("password hatali!");
}
}
if (returnFlag)
log.info("Giris yapildi.");
}
else{
log.info("key off durumunda oldugu icin logincontroller calismadi.");
}

return returnFlag;
}
}

[/code]

 

Şimdi herhangi bir yerden bu yazılan static logincontroller i çağırırsanız kodunuz çalışacaktır.

[code]

Services.loginController("mhu", "123");

[/code]

output1:

[code]

2018-11-02 14:30:33 INFO Services:14 – login success
2018-11-02 14:30:33 INFO Services:28 – Giris yapildi.

[/code]

output2:

[code] 2018-11-02 17:41:38 INFO Services:31 – key off durumunda oldugu icin logincontroller calismadi.
[/code]

Sonuç

Oluşturduğumuz properties dosyasında key on konumunda iken output1; off konumundayken output2 sonuçlarını gözlemlemekteyiz.

Bu çok basit bir uygulama oldu. Karmaşık ve büyük projelerinizde bu yöntemi izleyerek pakete müdahale etmeden properties file de tanımladığınız değerlerle kodunuzu kontrol edebilirsiniz. İnanın çok işe yarıyor :p

Follow me.

Görüşmek üzere, selamlar.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir