Problema
Si al menos una vez desarrolló un sistema grande en Java y lo admitió, entonces, seguro, se ha encontrado con el inconveniente de configurar ciertos procesos en el sistema.
A saber: los tamaños de los distintos búferes; parámetros del buzón; host, puerto, inicio de sesión, contraseña para llamar a servicios externos; todo tipo de tiempos muertos y mucho más.
Cada vez que no es común cambiar todo esto en el código, reconstruirlo y volverlo a hacer realidad.
Naturalmente, todos estos parámetros deben transferirse a los archivos de configuración y leerse desde allí; todos hacen esto.
En Java, de fábrica, hay ciertas Propiedades para esto. Pero usarlo es extremadamente inconveniente. En primer lugar, UTF-8 no funciona allí y, en segundo lugar, si cambió algún parámetro en el archivo de configuración, la aplicación debe reiniciarse para que el nuevo valor ingrese al sistema. Y si no desea reiniciarlo, o no es posible a las 11 a. M., Hora pico. Y posponer para más tarde no es una opción, lo necesita con urgencia. ¿Qué hacer? Es necesario que las configuraciones se vuelvan a leer "calientes", es decir, sin reiniciar el sistema.
Y también es muy importante: necesitas inventar de alguna manera para que los nombres de los parámetros de configuración en el código del programa correspondan a los del archivo. Es decir, para que sea difícil cometer un error. Por lo general, usan constantes para esto; ayuda, pero me gustaría algo más conveniente, más simple y más 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 .
Eso es todo. Gracias por su atención.