Java-Systemkonfiguration - wie man Schmerzen beseitigt

Lesen Sie die Konfigurationen über die Java-Schnittstelle
Lesen Sie die Konfigurationen über die Java-Schnittstelle

Problem

Wenn Sie mindestens einmal ein großes System in Java entwickelt und unterstützt haben, sind Sie mit Sicherheit auf die Unannehmlichkeiten beim Einrichten bestimmter Prozesse im System gestoßen. 





Nämlich: die Größen der verschiedenen Puffer; Postfachparameter; Host, Port, Login, Passwort zum Aufrufen externer Dienste; alle möglichen Auszeiten und vieles mehr.





Jedes Mal, wenn es nicht üblich ist, all dies im Code zu ändern, erstellen Sie ihn neu und rollen Sie ihn erneut auf real.





Natürlich müssen alle diese Parameter in die Konfigurationsdateien übertragen und von dort gelesen werden - jeder tut dies.





In Java gibt es standardmäßig bestimmte Eigenschaften dafür. Die Verwendung ist jedoch äußerst unpraktisch. Erstens funktioniert UTF-8 dort nicht, und zweitens muss die Anwendung neu gestartet werden, damit der neue Wert in das System gelangt, wenn Sie einen Parameter in der Konfigurationsdatei geändert haben. Und wenn Sie es nicht neu starten möchten oder es um 11 Uhr nicht möglich ist - Hauptverkehrszeit. Und eine Verschiebung auf später ist keine Option - Sie brauchen sie dringend. Was zu tun ist? Es ist notwendig, dass die Konfigurationen erneut "heiß" gelesen werden, dh ohne das System neu zu starten.





Und es ist auch sehr wichtig: Sie müssen irgendwie erfinden, damit die Namen der Konfigurationsparameter im Programmcode denen in der Datei entsprechen. Das heißt, es schwierig zu machen, einen Fehler zu machen. Normalerweise verwenden sie dafür Konstanten - es hilft, aber ich möchte etwas bequemeres, einfacheres und flexibleres.





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





.





- , , — , . .





— - , - - ( 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 .





Das ist alles. Vielen Dank für Ihre Aufmerksamkeit.












All Articles