Configuration des systèmes Java - Comment supprimer la douleur

Lire les configurations via l'interface Java
Lire les configurations via l'interface Java

Problème

Si vous avez au moins une fois dĂ©veloppĂ© un grand système en Java et l'avez pris en charge, vous avez certainement rencontrĂ© l'inconvĂ©nient de configurer certains processus dans le système. 





A savoir: les tailles des différents tampons; paramètres de boîte aux lettres; hôte, port, login, mot de passe pour appeler des services externes; toutes sortes de délais d'attente et bien plus encore.





Chaque fois, ce n'est pas comme il faut de changer tout cela dans le code, de le reconstruire et de le relancer en réel.





Naturellement, tous ces paramètres doivent être transférés dans les fichiers de configuration et lus à partir de là - tout le monde le fait.





En Java, hors de la boîte, il existe certaines propriétés pour cela. Mais son utilisation est extrêmement gênante. Premièrement, UTF-8 ne fonctionne pas là-bas, et deuxièmement, si vous avez modifié un paramètre dans le fichier de configuration, l'application doit être redémarrée pour que la nouvelle valeur entre dans le système. Et si vous ne souhaitez pas le redémarrer, ou si ce n'est pas possible à 11 heures - heure de pointe. Et reporter à plus tard n'est pas une option - vous en avez besoin de toute urgence. Ce qu'il faut faire? Il est nécessaire que les configurations soient relues "à chaud", c'est-à-dire sans redémarrer le système.





Et c'est aussi très important: vous devez en quelque sorte inventer pour que les noms des paramètres de configuration dans le code du programme correspondent à ceux du fichier. Autrement dit, il est difficile de faire une erreur. Habituellement, ils utilisent des constantes pour cela - cela aide, mais j'aimerais quelque chose de plus pratique, plus simple et plus flexible.





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





.





- , , — , . .





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





C'est tout. Merci de votre attention.












All Articles