1
resposta

[Projeto] Como re-executar uma classe de configuração?

Rodrigo boa tarde, não tem muito a ver com o curso mas vai minha dúvida.

Tenho uma classe de configuração (@configuration) chamada SenhaConfig que pega todas as propriedades de acesso a todos os bancos de dados que tenho na aplicação e chama uma api de Cofre de Senhas pra buscar os usuarios e senhas dos databases e guardo toda essa informação em @Beans.

Tenho outra classe também de configuração chamada DatasourceConfig que pega essas credenciais obtidas no SenhaConfig e cria os pools de conexão com os bancos de dados.

Mudaram a politica das senhas aqui na empresa para que sejam trocadas 1x por dia, o que acabou gerando bloqueio de usuários por tentativas com usuarios e senhas desatualizados, como solução, tentei capturar o SQLException gerado e reexecutar essa Classe de Senhas para renovar o Bean usando o SpringBoot, é possível substituir essas Beans em tempo de execução?

Faço o @Autowired com um @Qualifier de cada objeto contendo a credencial com o nome que dei aos Beans na SenhaConfig.

Tem alguma sugestão de como eu poderia resolver essa parada?

1 resposta

Olá Felipe, tudo bem?

Entendo sua situação e acredito que possa te ajudar. É possível sim substituir os Beans em tempo de execução utilizando o SpringBoot. Uma alternativa seria utilizar o método "registerSingleton" da classe "DefaultListableBeanFactory" para registrar o novo Bean com as novas credenciais.

Segue um exemplo de como você poderia implementar isso:

@Autowired
private DefaultListableBeanFactory beanFactory;

public void atualizarCredenciais(String nomeBean, Credenciais novasCredenciais) {
    beanFactory.destroySingleton(nomeBean);
    beanFactory.registerSingleton(nomeBean, new BeanComCredenciaisAtualizadas(novasCredenciais));
}

Nesse exemplo, o método "destroySingleton" é utilizado para remover o Bean antigo e o método "registerSingleton" é utilizado para registrar o novo Bean com as credenciais atualizadas.

Espero ter ajudado e bons estudos!