Config Server com back end em Banco de dados

10 respostas
spring-bootjava
J

Olá,

Estou implementando um Config server usando o Spring Cloud Config. Foi exigido que o backend do desse Config Server fosse com um banco de dados em vez do git. Estou tendo muita dificuldade para entender como o config server funciona nesse caso. E não tem muitos artigos com exemplos bons (na verdade não encontrei um bom). Os exemplos que encontrei são bem confusos. Alguém já fez uma implementação desse tipo?

10 Respostas

L

Vc já deu uma olhada nesse link da documentação: 2.1.7 JDBC Backend?

J

Bom dia Lucas,

Vi sim. Inclusive até implementei o config server. A minha maior dúvida dentro disso é como ele vai disponibilizar essas configurações para o client. Preciso escrever um controller para isso?

Eu gravei no banco as configurações da aplicação cliente mas ela não está conseguindo ler essas configurações.

Então eu gostaria de entender como o config server disponibiliza as configuracoes quando tem como back end um banco e como vou receber as configurações na aplicação client?

Já fez algo assim?

L

De acordo com essa documentação, vc precisa criar um schema de banco, e ter nesse schema uma tabela chamada PROPERTIES, com as colunas: APPLICATION, PROFILE, LABEL, KEY e VALUE.

Crie seu projeto spring boot assim:

@SpringBootApplication
@EnableConfigServer
@Import({JdbcEnvironmentRepository.class})
public class ConfigServer {

    @ConfigurationProperties(prefix = "spring.datasource")
    @Bean
    public DataSource dataSource() {
       return DataSourceBuilder.create().build();
    }

    @Bean
    public JdbcTemplate jdbcTemplate() {
        return new JdbcTemplate(dataSource());
    }

    public static void main(String[] arguments) {
        SpringApplication.run(ConfigServer.class, arguments);
    }  
}

E deixe seu application assim:

spring:
  datasource:
    driver-class-name: driver.do.seu.banco
    url: 'jdbc:url-de-conexao'
  cloud:
    config:
      server:
        jdbc:
          order: 2
          sql: 'SELECT key, value FROM Properties WHERE application = ? AND profile = ? AND label = ?'
  username: root
  password: suaSenha

Não esqueça de colocar a dependência do spring-jdbc no projeto

J

Entendi. A tabela eu já tinha. Mas não tinha colocado o @import e criado esses Beans.
Mais uma pergunta, na aplicação cliente só preciso colocar a dependencia do Spring Cloud Config client e colocar no bootstrap.yml o nome da aplicação, uri do config server, o profile ativo e o label? ou tem mais alguma coisa que preciso configurar?

No momento o bootstrap da minha aplicação cliente está assim:

spring:
    application:
        name: app-products
    cloud:
        config:
            uri: http://localhost:8888
            label: dev
            profile: dev
L

Se não me engano, só isso mesmo. Apenas o profile que eu uso de outra forma:

spring:
  profiles:
    active: dev
J

Beleza. Obrigada Lucas.

Só mais uma pergunta, eu também tava tentando usar a anotação @RefreshScope para uma atualização automática das configurações em casos de alterações. Nos exemplos que vi, essa anotação estava sendo usanda no controller, estava mais ou menos assim

@RestController
@RefreshScope
public class ProductController{

    @Value("${propertie.messagem}")
    private String menssagem;
}

Teria uma forma de centralizar isso em uma classe de configuração por exemplo? Tipo em vez de colocar o @RefreshScope em cada componente da aplicação que vai pegar um valor que está nas configurações, usar uma classe que vai atualizar tudo.

J

Olá Lucas, consegui desenrolar as coisas por aqui.

Muito Obrigada!

L

Desculpe não ter respondido (tb nunca precisei usar esse refresh scope). Mas bom que vc conseguiu.

A

Boa tarde amigos!
Vocês me ajudaram muito pra configurar o server do spring cloud config para acessar o banco. Só fiquei com uma dúvida de como consultar o valor salvo na tabela através do cliente.
Como deve ficar o aplication.yml do config client pra conseguir pegar o value da key do banco?

Agradeço!

A

Consegui. Basta colocar no nome da Key dentro do application client

Criado 15 de julho de 2019
Ultima resposta 17 de jan. de 2022
Respostas 10
Participantes 3