4 Ocak 2021 Pazartesi

SpringCloud Config Client

Giriş
Config Server için @EnableConfigServer yazısına bakınız.
Konfigürasyon değiştirilince tekrar okumak için @RefreshScope yazısına bakınız.

Microservice yazılımı konfigürasyon ayalarını artık Config Server'dan çekecektir

Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
bootstrap.yml or bootstrap.properties Nedir
Açıklaması şöyle. İstemci tarafında kullanılır. Artık bu dosyaya gerek yok
bootstrap.yml is loaded before application.yml.

It is typically used for the following:

- when using Spring Cloud Config Server, you should specify spring.application.name and spring.cloud.config.server.git.uri inside bootstrap.yml
- some encryption/decryption information
Örnek - Eski Kullanım
Açıklaması şöyle
If you are using the latest version of spring boot use spring.config.import=... instead of spring.cloud.config.uri=...
Şöyle yaparız. Burada github'daki latest branch'ine atıfta bulunuluyor
spring.cloud.config.uri=http://localhost:8888
spring.application.name=spring-cloud-config-client
spring.cloud.config.label=latest
spring.profiles.active=dev
Örnek
Şöyle yaparız. Burada github'daki main branch'ine atıfta bulunuluyor
spring.application.name=config-client 
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.label=main
Örnek - Yeni Kullanım
Şöyle yaparız.
spring.config.import=optional:configserver:http://localhost:8888 # Config sunucu adresi
spring.application.name=batch-jobs # Dosya ismi
spring.profiles.active=dev # Profile ismi
Örnek - Yeni Kullanım
Şöyle yaparız
server.port=8083

spring.application.name=neo4j-client # Dosya ismi
spring.config.import=configserver:http://localhost:8888/ # Config sunucu adresi
Örnek - Yeni Kullanım Yaml Olarak
Şöyle yaparız
spring:
  application:
    name: spring-boot-starter
  profiles:
    active: dev
  config:
    import: optional:configserver:http://localhost:8888

management:
  endpoints:
    web:
      exposure:
        include: "*"
Örnek - Retry Ayarları
Şöyle yaparız. spring.cloud.config.uri ile Config Server'ın adresi belirtilir.
spring.application.name=hello-service
server.port=8080
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
Eğer Config Server ulaşılamıyorsa, şu ayarlar kullanılabilir
spring.cloud.config.fail-fast
spring.cloud.config.retry.initial-interval
spring.cloud.config.retry.multiplier
spring.cloud.config.retry.max-interval
spring.cloud.config.retry.max-attempts
spring.application.name Alanı
Okunacak property dosyasını ismini belirtir. Dosya ismine aktif profile da eklenir. Açıklaması şöyle
This is the identifier for the microservice application and there will be a property file with the same name in the repository. This will identify which property file to fetch from the repository for a particular microservice. For example, for hello-service.properties, we would use hello-service-development.properties (the -development suffix tells the system to fetch code for development profile).
Örnek - Çift Spring Security Ayarı
Eğer zaten Spring Security varsa, /actuator/refresh adresini farklı bir şifre ile korumak isteyebiliriz. Şöyle yaparız. Burada @Order(1) ile actuator/refresh adresine öncelik veriliyor.
@Order(1)
@Configuration
public static class ActuatorSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  public void configure(HttpSecurity http) throws Exception {
    http
      .csrf().disable()
      .antMatcher("/actuator/*")
      .authorizeRequests()
        .antMatchers("/actuator/*").authenticated()
      .and()
        .httpBasic();
  }
  @Override
  protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication()
      .withUser("serviceOneUser")
      .password("{noop}serviceOnePassword")
      .roles("USER");
  }
}

@Order(2)
@Configuration
public static class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  public void configure(HttpSecurity http) throws Exception {
    http
      .authorizeRequests()
        .anyRequest().authenticated()
      .and()
       .oauth2Login();
  }
}
Bu adresi şifreyle tetiklemek için şöyle yaparız
curl -u serviceOneUser:serviceOnePassword -X POST http://localhost:8001/actuator/refresh
Örnek
Şöyle yaparız. Burada Config Server'dan okunacak değer @Vaue ile çekiliyor.
import org.springframework.cloud.context.config.annotation.RefreshScope;
...
@RefreshScope
@RestController
@RequestMapping("/secure")
public static class SecureController {
  @Value("${hello.message}")
  private String helloMessage;
  
  @GetMapping
  public String secure(Principal principal) {
    return helloMessage;
  }
}

Hiç yorum yok:

Yorum Gönder