Javaシステム構成-痛みを取り除く方法

Javaインターフェースを介して構成を読み取る
Javaインターフェースを介して構成を読み取る

問題

Javaで大規模なシステムを開発してサポートしたことがある場合は、確かに、システムに特定のプロセスを設定するという不便に遭遇しています。 





つまり、さまざまなバッファのサイズ。メールボックスパラメータ; 外部サービスを呼び出すためのホスト、ポート、ログイン、パスワード。あらゆる種類のタイムアウトなど。





コード内のこれらすべてを変更することは間違いではないたびに、再構築して実際に再ロールします。





当然、これらすべてのパラメーターを構成ファイルに転送し、そこから読み取る必要があります。誰もがこれを行います。





Javaでは、すぐに使用できる特定のプロパティがあります。しかし、それを使用することは非常に不便です。まず、UTF-8はそこでは機能しません。次に、構成ファイルのパラメーターを変更した場合、新しい値をシステムに取り込むには、アプリケーションを再起動する必要があります。また、再起動したくない場合、または午前11時(ピーク時)に再起動できない場合。そして、後でまで延期することはオプションではありません-あなたはそれを緊急に必要とします。何をすべきか?設定を「ホット」に再読み込みする必要があります。つまり、システムを再起動する必要はありません。





また、これも非常に重要です。プログラムコードの構成パラメーターの名前がファイルの名前に対応するように、なんらかの方法で発明する必要があります。つまり、間違いを犯しにくくすることです。通常、彼らはこれに定数を使用します-それは役に立ちますが、私はもっと便利で、よりシンプルで、より柔軟なものが欲しいです。





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





.





- , , — , . .





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





それで全部です。清聴ありがとうございました。












All Articles