Properties Sınıfı
Properties, anahtar-değer çiftlerinden oluşan bir yapılandırma deposudur ve hem anahtarlar hem değerler String'tir. Java uygulamalarında ayarları (veritabanı adresi, port, özellik bayrakları) ve uluslararasılaştırma (…
Properties Sınıfı
Properties, anahtar-değer çiftlerinden oluşan bir yapılandırma deposudur ve hem anahtarlar
hem değerler String'tir. Java uygulamalarında ayarları (veritabanı adresi, port, özellik
bayrakları) ve uluslararasılaştırma (i18n) metinlerini tutmanın klasik yoludur. .properties metin
formatını okuyup yazar; Hashtable'dan türer ama özellikle yapılandırma için tasarlanmıştır.
Temel kullanım
Properties config = new Properties(); config.setProperty("server.port", "8080"); config.getProperty("server.port"); // "8080" config.getProperty("timeout", "30"); // yoksa varsayılan "30"
getProperty'nin varsayılan değerli sürümü çok kullanışlıdır: anahtar yoksa null yerine
verdiğin değeri döndürür. Örnek 1 (./Ornek1.java) ayarlama, okuma ve varsayılanı gösterir.
Dosyaya yazma/okuma: store / load
Properties, .properties metin formatını okuyup yazabilir:
config.store(writer, "yorum"); // anahtar=değer satırları + tarih/yorum props.load(reader); // .properties metnini geri oku
.properties formatı basittir:
# yorum satırı db.url=jdbc:postgresql://localhost/app db.user=admin server.port=8080
XML formatı için storeToXML/loadFromXML da vardır. Örnek 1 store/load döngüsünü gösterir
(dosya yerine StringWriter/StringReader ile, ama davranış aynıdır).
Sistem özellikleri (System Properties)
JVM, çalışma ortamı hakkında hazır özellikler sunar; bunlara System.getProperty ile erişilir:
System.getProperty("java.version"); // JVM sürümü System.getProperty("os.name"); // işletim sistemi System.getProperty("user.dir"); // çalışma dizini System.getProperty("ayar", "varsayılan"); System.setProperty("uygulama.modu", "uretim"); // çalışma anında ayarla
Komut satırından da verilebilir: java -Duygulama.modu=test Uygulama. Örnek 2 (./Ornek2.java)
sistem özelliklerini ve ortam değişkenlerini (System.getenv("PATH")) gösterir.
Property vs env var: System property JVM'e özeldir ve değiştirilebilir; ortam değişkeni (
getenv) işletim sisteminden gelir ve salt okunurdur.
Properties'ten modern yapılandırmaya
Properties hâlâ geçerlidir ama modern uygulamalarda genelde üst seviye araçlar kullanılır:
- Spring Boot:
application.propertiesveyaapplication.ymlile yapılandırma;@Valueve@ConfigurationPropertiesile tipli, doğrulanmış ayarlar (bu portalın backend'i de böyle yapılandırılır). Spring, perde arkasında buPropertiesmekanizmasının üzerine kuruludur. - Ortam değişkenleri / .env: Konteyner (Docker/K8s) dünyasında ayarlar genelde env var ile enjekte edilir (12-factor app).
Özet
Properties'in String anahtar-değer yapılandırma deposu olduğunu; setProperty/getProperty
(varsayılanlı) ve store/load ile .properties okuma-yazmayı (Örnek 1); sistem özelliklerini ve
ortam değişkenlerini (Örnek 2) öğrendik; Spring Boot yapılandırmasıyla ilişkisine değindik. Sırada,
matematiksel işlemler: Math sınıfı.
▶ Kod Örnekleri(2)
Ornek1
çalıştırılabilir1// Ornek1: Properties — anahtar-değer yapılandırması; yükleme ve kaydetme.
2// Çalıştırma: java Ornek1.java
3import java.io.StringReader;
4import java.io.StringWriter;
5import java.util.Properties;
6
7public class Ornek1 {
8
9 public static void main(String[] args) throws Exception {
10 Properties config = new Properties();
11
12 // Değer ayarlama (her anahtar ve değer String'tir)
13 config.setProperty("db.url", "jdbc:postgresql://localhost/app");
14 config.setProperty("db.user", "admin");
15 config.setProperty("server.port", "8080");
16
17 // Okuma — getProperty + varsayılan değer
18 System.out.println("db.url: " + config.getProperty("db.url"));
19 System.out.println("server.port: " + config.getProperty("server.port"));
20 System.out.println("timeout (yok, varsayılan): " + config.getProperty("timeout", "30"));
21
22 // KAYDET (store): .properties metin formatında yaz (gerçekte dosyaya/akışa)
23 StringWriter sw = new StringWriter();
24 config.store(sw, "Uygulama Yapılandırması");
25 String metin = sw.toString();
26 System.out.println("\n--- store() çıktısı (.properties formatı) ---");
27 // İlk satır tarih yorumu olur; onu atlayıp gösterelim
28 metin.lines().filter(l -> !l.startsWith("#")).forEach(l -> System.out.println(l));
29
30 // YÜKLE (load): .properties metnini geri oku
31 Properties yuklenen = new Properties();
32 yuklenen.load(new StringReader("db.url=jdbc:mysql://db/app\ndb.user=root\ncache.enabled=true"));
33 System.out.println("\nYüklenen db.url: " + yuklenen.getProperty("db.url"));
34 System.out.println("cache.enabled: " + yuklenen.getProperty("cache.enabled"));
35
36 System.out.println("""
37
38 --- Properties ---
39 Anahtar-değer (her ikisi de String) yapılandırma deposudur; Hashtable'dan türer.
40 setProperty/getProperty (getProperty varsayılan değer alabilir).
41 store(writer): .properties metin formatında yaz; load(reader): geri oku.
42 .properties formatı: 'anahtar=değer', '#' yorum. XML için storeToXML/loadFromXML de var.
43 Kullanım: uygulama ayarları, i18n metinleri. (Spring Boot bunun üzerine application.properties/yml sunar.)""");
44 }
45}Ornek2
çalıştırılabilir1// Ornek2: Sistem özellikleri (System Properties) ve ortam değişkenleri.
2// Çalıştırma: java Ornek2.java
3public class Ornek2 {
4
5 public static void main(String[] args) {
6 // System.getProperty: JVM/işletim sistemi hakkında hazır özellikler.
7 System.out.println("Java sürümü : " + System.getProperty("java.version"));
8 System.out.println("Java sağlayıcı : " + System.getProperty("java.vendor"));
9 System.out.println("İşletim sistemi: " + System.getProperty("os.name"));
10 System.out.println("Kullanıcı dizini: " + System.getProperty("user.dir"));
11 System.out.println("Dosya ayracı : '" + System.getProperty("file.separator") + "'");
12 System.out.println("Satır ayracı : " + System.lineSeparator().replace("\n", "\\n"));
13
14 // Varsayılan değerle güvenli okuma:
15 System.out.println("Özel ayar (yok): " + System.getProperty("benim.ayarim", "varsayılan"));
16
17 // Kendi sistem özelliğini ayarlama (JVM ömrü boyunca):
18 System.setProperty("uygulama.modu", "uretim");
19 System.out.println("Ayarlanan: " + System.getProperty("uygulama.modu"));
20
21 // Ortam değişkenleri (environment variables) — işletim sisteminden:
22 String path = System.getenv("PATH");
23 System.out.println("\nPATH var mı? " + (path != null && !path.isEmpty()));
24 System.out.println("HOME: " + System.getenv().getOrDefault("HOME", "(tanımsız)"));
25
26 System.out.println("""
27
28 --- Sistem özellikleri ve ortam değişkenleri ---
29 System.getProperty(ad[, varsayilan]): JVM özellikleri (java.version, os.name, user.dir...).
30 -Dadi=deger ile komut satırından da verilir: java -Duygulama.modu=test ...
31 System.setProperty: çalışma anında ayarlama (yalnızca bu JVM için).
32 System.getenv(ad): işletim sistemi ortam değişkenleri (PATH, HOME...) — salt okunur.
33 Fark: system property JVM'e özel ve değiştirilebilir; env var OS'ten gelir, salt okunur.""");
34 }
35}