Spring Cloud를 사용한 Netflix Archaius 소개

1. 개요

Netflix Archaius는 강력한 구성 관리 라이브러리입니다.

간단히 말해, 다양한 소스에서 구성 속성을 수집하는 데 사용할 수있는 프레임 워크로 스레드로부터 빠르고 안전한 액세스를 제공합니다.

또한 라이브러리를 사용하면 런타임에 속성을 동적으로 변경할 수 있으므로 응용 프로그램을 다시 시작하지 않고도 시스템에서 이러한 변형을 얻을 수 있습니다.

이 입문 자습서에서는 간단한 Spring Cloud Archaius 구성을 설정하고 내부에서 일어나는 일을 설명하고 마지막으로 Spring에서 기본 설정을 확장하는 방법을 살펴 봅니다.

2. Netflix Archaius 기능

아시다시피, Spring Boot는 이미 외부화 된 구성을 관리하는 도구를 제공하고 있는데 왜 다른 메커니즘을 설정해야할까요?

음, Archaius는 다른 구성 프레임 워크에서 고려하지 않는 몇 가지 편리하고 흥미로운 기능을 제공합니다 . 핵심 포인트 중 일부는 다음과 같습니다.

  • 동적 및 유형 속성
  • 속성 변형에 대해 호출되는 콜백 메커니즘
  • URL, JDBC 및 Amazon DynamoDB와 같은 동적 구성 소스의 사용 가능 구현
  • Spring Boot Actuator 또는 JConsole에서 액세스하여 속성을 검사하고 조작 할 수있는 JMX MBean
  • 동적 속성 유효성 검사

이러한 특전은 많은 시나리오에서 유용 할 수 있습니다.

따라서 Spring Cloud는 Archaius가 Spring Environment에서 속성을 읽을 수 있도록 'Spring Environment Bridge'를 쉽게 구성 할 수있는 라이브러리를 개발했습니다.

3. 종속성

의는 추가 할 수 있도록 스프링 클라우드 스타터 넷플 릭스 - archaius를 가 우리의 프로젝트에 모두에게 필요한 종속성을 추가 할 것입니다, 우리의 응용 프로그램에 .

필요에 따라 dependencyManagement 섹션 에 spring-cloud-netflix 를 추가 하고 아티팩트 버전의 사양에 의존 할 수도 있습니다 .

  org.springframework.cloud spring-cloud-starter-netflix-archaius      org.springframework.cloud spring-cloud-netflix 2.0.1.RELEASE pom import   

참고 : Maven Central을 확인하여 최신 버전의 시작 라이브러리를 사용하고 있는지 확인할 수 있습니다.

4. 사용법

필요한 종속성을 추가하면 프레임 워크에서 관리하는 속성에 액세스 할 수 있습니다 .

DynamicStringProperty dynamicProperty = DynamicPropertyFactory.getInstance() .getStringProperty("baeldung.archaius.property", "default value"); String propertyCurrentValue = dynamicProperty.get();

이것이 어떻게 바로 사용할 수 있는지 간단한 예를 들어 보겠습니다.

4.1. 빠른 예

기본적으로 애플리케이션의 클래스 경로에있는 config.properties 파일에 정의 된 모든 속성을 동적으로 관리합니다 .

따라서 임의의 속성을 사용하여 리소스 폴더에 추가해 보겠습니다.

#config.properties baeldung.archaius.properties.one=one FROM:config.properties

이제 특정 순간에 속성 값을 확인할 수있는 방법이 필요합니다. 이 경우 값을 JSON 응답으로 검색 하는 RestController 를 만듭니다 .

@RestController public class ConfigPropertiesController { private DynamicStringProperty propertyOneWithDynamic = DynamicPropertyFactory.getInstance() .getStringProperty("baeldung.archaius.properties.one", "not found!"); @GetMapping("/property-from-dynamic-management") public String getPropertyValue() { return propertyOneWithDynamic.getName() + ": " + propertyOneWithDynamic.get(); } }

시도해 보겠습니다. 이 끝점에 요청을 보낼 수 있으며 서비스는 예상대로 config.properties에 저장된 값을 검색합니다 .

지금까지는 별거 아니죠? 이제 서비스를 다시 시작하지 않고 계속해서 클래스 경로 파일의 속성 값을 변경해 보겠습니다. 결과적으로 1 분 정도 후에 끝점에 대한 호출이 새 값을 검색해야합니다. 꽤 멋지지 않나요?

다음으로, 우리는 내부에서 일어나는 일을 이해하려고 노력할 것입니다.

5. 어떻게 작동합니까?

우선 큰 그림을 이해 해보자.

Archaius는 Apache Commons Configuration 라이브러리의 확장으로, 높은 처리량과 스레드로부터 안전한 구현으로 동적 소스에 대한 폴링 프레임 워크와 같은 멋진 기능을 추가합니다.

그러면 spring-cloud-netflix-archaius 라이브러리가 작동하여 모든 다른 속성 소스를 병합하고 이러한 소스로 Archaius 도구를 자동 구성합니다.

5.1. Netflix Archaius 라이브러리

다양한 소스에서 얻은 다양한 구성 모음 인 Composite Configuration을 정의합니다.

또한 이러한 구성 소스 중 일부는 변경을 위해 런타임에 폴링되는 것을 지원할 수 있습니다. Archaius는 이러한 유형의 소스를 구성하기위한 인터페이스 및 일부 사전 정의 된 구현을 제공합니다.

소스 컬렉션은 계층화되어 속성이 여러 구성에있는 경우 최종 값은 최상위 슬롯에있는 값이됩니다.

마지막으로 ConfigurationManager 는 시스템 전체의 구성 및 배포 컨텍스트를 처리합니다. 최종 컴포지트 구성을 설치하거나 수정을 위해 설치된 구성을 검색 할 수 있습니다.

5.2. 스프링 클라우드 지원

Spring Cloud Archaius 라이브러리의 주요 작업은 모든 다른 구성 소스를 ConcurrentCompositeConfiguration 으로 병합 하고 ConfigurationManager를 사용하여 설치하는 것 입니다.

라이브러리가 소스를 정의하는 우선 순위는 다음과 같습니다.

  1. 컨텍스트에 정의 된 Apache 공통 구성 AbstractConfiguration Bean
  2. Autowired Spring ConfigurableEnvironment에 정의 된 모든 소스
  3. 위의 예에서 본 기본 Archaius 소스
  4. Apache의 SystemConfigurationEnvironmentConfiguration 소스

이 Spring Cloud 라이브러리가 제공하는 또 다른 유용한 기능 은 속성을 모니터링하고 상호 작용할 액추에이터 엔드 포인트 의 정의입니다 . 사용법은이 튜토리얼의 범위를 벗어납니다.

6. Archaius 구성 조정 및 확장

이제 Archaius의 작동 방식을 더 잘 이해 했으므로 구성을 응용 프로그램에 적용하는 방법 또는 구성 소스를 사용하여 기능을 확장하는 방법을 분석 할 수 있습니다.

6.1. Archaius 지원 구성 속성

Archaius가 config.properties 파일과 유사한 다른 구성 파일을 고려하도록 하려면 archaius.configurationSource.additionalUrls 시스템 속성을 정의 할 수 있습니다 .

The value is parsed to a list of URLs separated by a comma, so, for example, we can add this system property when we launch the application:

-Darchaius.configurationSource.additionalUrls= "classpath:other-dir/extra.properties, file:///home/user/other-extra.properties"

Archaius will read the config.properties file first, and then the other ones, in the specified order. Because of this, the properties defined in the latter files will have priority over the prior ones.

There are a couple of other system properties we can use to configure various aspects of the Archaius default configuration:

  • archaius.configurationSource.defaultFileName: the default configuration file name in the classpath
  • archaius.fixedDelayPollingScheduler.initialDelayMills: initial delay before reading the configuration source
  • archaius.fixedDelayPollingScheduler.delayMills: delay between two reads of the source; the default value is 1 minute

6.2. Adding Additional Configuration Sources with Spring

How could we add a different Configuration Source to be managed by the described framework? And how could we manage dynamic properties with higher precedence than the ones defined in the Spring Environment?

Reviewing what we mentioned in section 4.2, we can realize that the highest configurations in the Composite Configuration defined by Spring are the AbstractConfiguration beans defined in the context.

Thus, all we need to do is add an implementation of this Apache's abstract class to our Spring Context using some of the functionality provided by Archaius, and the Spring's autoconfiguration will spontaneously add it to the managed configuration properties.

To keep things simple, we'll see an example where we configure a properties file similar to the default config.properties but with the difference of having a higher precedence than the rest of Spring environment and application properties:

@Bean public AbstractConfiguration addApplicationPropertiesSource() { URL configPropertyURL = (new ClassPathResource("other-config.properties")).getURL(); PolledConfigurationSource source = new URLConfigurationSource(configPropertyURL); return new DynamicConfiguration(source, new FixedDelayPollingScheduler()); }

Lucky for us, it contemplates several configuration sources that we can set up with almost no effort. Their configuration is out of the scope of this introductory tutorial.

7. Conclusion

요약하자면, 우리는 Archaius와 구성 관리를 활용하기 위해 제공하는 몇 가지 멋진 기능에 대해 배웠습니다.

또한 Spring Cloud 자동 구성 라이브러리가 어떻게 작동하여이 라이브러리의 API를 편리하게 사용할 수 있는지 살펴 보았습니다.

다시 한 번이 튜토리얼에 표시된 모든 예제와 Github 저장소에서 다른 예제를 찾을 수 있습니다.