Konfigurasi sistem Java - cara menghilangkan rasa sakit

Baca konfigurasi melalui antarmuka Java
Baca konfigurasi melalui antarmuka Java

Masalah

Jika Anda setidaknya pernah mengembangkan sistem besar di Java dan mendukungnya, Anda pasti pernah mengalami ketidaknyamanan dalam menyiapkan proses tertentu dalam sistem. 





Yaitu: ukuran berbagai buffer; parameter kotak surat; host, port, login, password untuk memanggil layanan eksternal; segala macam batas waktu dan banyak lagi.





Setiap kali tidak lazim untuk mengubah semua ini dalam kode, buat kembali dan putar ulang menjadi nyata.





Biasanya, semua parameter ini perlu ditransfer ke file konfigurasi dan dibaca dari sana - setiap orang melakukan ini.





Di Jawa, di luar kotak, ada Properti tertentu untuk ini. Tapi menggunakannya sangat merepotkan. Pertama, UTF-8 tidak berfungsi di sana, dan kedua, jika Anda mengubah parameter apa pun dalam file konfigurasi, maka aplikasi harus dimulai ulang agar nilai baru dapat masuk ke sistem. Dan jika Anda tidak ingin memulai ulang, atau tidak memungkinkan pada jam 11 pagi - jam sibuk. Dan menunda sampai nanti bukanlah pilihan - Anda sangat membutuhkannya. Apa yang harus dilakukan? Konfigurasi perlu dibaca ulang "panas", yaitu tanpa me-restart sistem.





Dan ini juga sangat penting: Anda harus menemukan sedemikian rupa sehingga nama parameter konfigurasi dalam kode program sesuai dengan yang ada di file. Artinya, membuatnya sulit untuk membuat kesalahan. Biasanya mereka menggunakan konstanta untuk ini - ini membantu, tetapi saya ingin sesuatu yang lebih nyaman, lebih sederhana dan lebih fleksibel.





: , . . ? ? , ? ? ? ? — ? , ? , - …





.





- , , — , . .





— - , - - ( IDE ) — — .





, - (), - — - , .





greetgo! , — .





Java- , , , . — . , — — .





updateTimeout batchSize — . Java-:





public interface MyMigrationConfig {
  long updateTimeoutMs();
  int  batchSize();
}
      
      



:





@Description("    ");
public interface MyMigrationConfig {
  @Description("      ."
               + "    ,    "
               + "   ")
  @DefaultLongValue(30000)
  long updateTimeoutMs();

  @Description("     ")
  @DefaultIntValue(150)
  int batchSize();
}
      
      



- , , , , :





@Autowire
private MyMigrationConfig config;
 
public void migrate() {
  // ...
  System.out.println(" updateTimeoutMs = " + config.updateTimeoutMs());
  System.out.println(" batchSize       = " + config.bachSize());
  // ...
}
      
      



, .





, . . , production ready. — MIT.





greetgo conf — maven github: https://github.com/greetgo/greetgo.conf





, :





public class MyConfigFactory extends FileConfigFactory {
  @Override
  public Path getBaseDir() {
    return Paths.get("/path/to/directory/where/config/files/are/located");
  }

  @Override
  protected String getConfigFileExt() {
    return ".conf";
  }
}
      
      



createConfig:   





MyConfigFactory confFactory = new MyConfigFactory();

MyMigrationConfig config =  confFactory.createConfig(MyMigrationConfig.class);
      
      



. MyMigrationConfig.conf. , , :





# Created at 2021-01-29 11:03:21
#     

#    
batchSize=150

#       .   
# ,       
updateTimeoutMs=30000
      
      



. — , , ( ), .





kubernetes. , , Zookeeper, FileConfigFactory AbstractZookeeperConfigFactory, Zookeeper.





JdbcConfigFactory — .





, -.





@FirstReadEnv — , — kubernetes .





Itu saja. Terima kasih atas perhatian Anda.












All Articles