Problema
Se você desenvolveu pelo menos uma vez um grande sistema em Java e o suportou, então, com certeza, você encontrou o inconveniente de configurar certos processos no sistema.
A saber: os tamanhos dos vários buffers; parâmetros de caixa de correio; host, porta, login, senha para chamar serviços externos; todos os tipos de tempo limite e muito mais.
Cada vez que não é comum mudar tudo isso no código, reconstrua-o e re-role-o para real.
Naturalmente, todos esses parâmetros precisam ser transferidos para os arquivos de configuração e lidos a partir deles - todo mundo faz isso.
Em Java, fora da caixa, há certas propriedades para isso. Mas usá-lo é extremamente inconveniente. Em primeiro lugar, o UTF-8 não funciona lá e, em segundo lugar, se você alterou qualquer parâmetro no arquivo de configuração, o aplicativo deve ser reiniciado para que o novo valor entre no sistema. E se você não quiser reiniciá-lo, ou não for possível às 11h - horário de pico. E adiar para mais tarde não é uma opção - você precisa disso com urgência. O que fazer? É necessário que as configurações sejam relidas "a quente", ou seja, sem reiniciar o sistema.
E também é muito importante: você precisa inventar de alguma forma para que os nomes dos parâmetros de configuração no código do programa correspondam aos do arquivo. Isto é, para dificultar o erro. Normalmente eles usam constantes para isso - ajuda, mas eu gostaria de algo mais conveniente, mais simples e mais flexível.
: , . . ? ? , ? ? ? ? — ? , ? , - …
.
- , , — , . .
— - , - - ( 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 .
Isso é tudo. Obrigado pela atenção.