Spring Cloud Config Server는 다음과 같은 이점을 제공합니다.
외부 구성(이름-값 쌍 또는 동등한 YAML 콘텐츠)을 위한 HTTP 리소스 기반 API
속성 값 암호화 및 해독(대칭 또는 비대칭)
@EnableConfigServer
사용하여 Spring Boot 애플리케이션에 쉽게 포함 가능
특히 Spring 애플리케이션의 경우 Spring Cloud Config Client를 사용하면 다음을 수행할 수 있습니다.
구성 서버에 바인딩하고 원격 속성 소스로 Spring Environment
초기화합니다.
속성 값(대칭 또는 비대칭)을 암호화하고 해독합니다.
구성이 변경되면 다시 초기화하려는 Spring @Beans
용 @RefreshScope
.
관리 엔드포인트 사용:
Environment
업데이트하고 @ConfigurationProperties
및 로그 수준을 다시 바인딩하기 위한 /env
.
/refresh
@RefreshScope
빈을 새로 고치는 데 사용됩니다.
/restart
Spring 컨텍스트를 다시 시작합니다(기본적으로 비활성화되어 있음).
Lifecycle
메서드( ApplicationContext
의 stop()
및 start()
) 호출을 위한 /pause
및 /resume
부트스트랩 애플리케이션 컨텍스트: 무엇이든 수행하도록 교육할 수 있는 기본 애플리케이션의 상위 컨텍스트입니다(기본적으로 구성 서버에 바인딩되고 속성 값을 해독합니다).
여기에서 샘플 애플리케이션을 찾을 수 있습니다. 이는 Spring Boot 애플리케이션이므로 일반적인 메커니즘(예: mvn spring-boot:run
)을 사용하여 실행할 수 있습니다. 실행되면 http://localhost:8888
(구성 가능한 기본값)에서 구성 서버를 찾으므로 서버도 실행하여 모두 함께 작동하는 것을 확인할 수 있습니다.
샘플에는 구성 서버가 동일한 JVM(다른 포트 사용)에서 시작되는 테스트 사례가 있으며 테스트에서는 git 구성 저장소의 환경 속성이 존재하는지 확인합니다. 구성 서버의 위치를 변경하려면 bootstrap.yml
(또는 시스템 속성 및 기타 위치)에서 spring.cloud.config.uri
설정할 수 있습니다.
테스트 사례에는 동일한 방식으로 서버를 실행하는 main()
메서드가 있으므로(해당 포트에 대한 로그 확인) 전체 시스템을 하나의 프로세스에서 실행하고 사용할 수 있습니다(예: main()
IDE의 메소드). main()
메서드는 git 저장소의 작업 디렉터리에 대해 target/config
사용하므로 해당 디렉터리에서 로컬 변경 사항을 적용하고 실행 중인 앱에 반영되는 내용을 확인할 수 있습니다. 다음 예는 테스트 사례를 수정하는 세션을 보여줍니다.
$ 컬 로컬 호스트:8080/env/샘플 가장 최근의 $ vi 대상/config/mytest.properties .. "sample" 값 변경, 선택적으로 커밋 $ 컬 -X POST 로컬 호스트:8080/새로 고침 ["견본"] $ 컬 로컬 호스트:8080/env/샘플 샘플값
새로 고침 끝점은 "샘플" 속성이 변경되었음을 보고합니다.
소스를 빌드하려면 JDK 17을 설치해야 합니다.
Spring Cloud는 대부분의 빌드 관련 활동에 Maven을 사용하므로 관심 있는 프로젝트를 복제하고 입력하면 매우 빠르게 시작할 수 있습니다.
$ ./mvnw 설치
메모 | 또한 Maven(>=3.3.3)을 직접 설치하고 아래 예에서 ./mvnw 대신 mvn 명령을 실행할 수도 있습니다. 그렇게 하는 경우 로컬 Maven 설정에 spring 시험판 아티팩트에 대한 저장소 선언이 포함되어 있지 않은 경우 -P spring 추가해야 할 수도 있습니다. |
메모 | -Xmx512m -XX:MaxPermSize=128m 과 같은 값으로 MAVEN_OPTS 환경 변수를 설정하여 Maven에 사용 가능한 메모리 양을 늘려야 할 수도 있습니다. 우리는 이 문제를 .mvn 구성에서 다루려고 합니다. 따라서 빌드를 성공시키기 위해 이를 수행해야 하는 경우 티켓을 제출하여 소스 제어에 설정을 추가하세요. |
테스트를 위해 미들웨어(예: Redis)가 필요한 프로젝트의 경우 일반적으로 [Docker](https://www.docker.com/get-started)의 로컬 인스턴스가 설치되어 실행되고 있어야 합니다.
spring-cloud-build 모듈에는 "docs" 프로필이 있으며, 이 프로필을 켜면 modules/ROOT/
에서 Antora를 사용하여 asciidoc 소스를 빌드하려고 시도합니다.
해당 프로세스의 일부로 docs/src/main/asciidoc/README.adoc
찾고 모든 포함을 로드하여 처리하지만 구문 분석하거나 렌더링하지 않고 ${main.basedir}
에 복사하기만 하면 됩니다(기본값은 ${basedir}
, 즉 프로젝트의 루트). README에 변경 사항이 있으면 Maven 빌드 후 올바른 위치에 수정된 파일로 표시됩니다. 커밋하고 변경사항을 푸시하면 됩니다.
IDE 기본 설정이 없으면 코드 작업 시 Spring Tools Suite 또는 Eclipse를 사용하는 것이 좋습니다. 우리는 maven 지원을 위해 m2eclipse eclipse 플러그인을 사용합니다. 다른 IDE 및 도구도 Maven 3.3.3 이상을 사용하는 한 문제 없이 작동합니다.
Spring Cloud 프로젝트에서는 Spring 마일스톤 및 스냅샷 저장소를 해결하기 위해 'spring' Maven 프로필을 활성화해야 합니다. 선호하는 IDE를 사용하여 이 프로필을 활성화하지 않으면 빌드 오류가 발생할 수 있습니다.
Eclipse로 작업할 때 m2eclipse Eclipse 플러그인을 권장합니다. m2eclipse가 아직 설치되어 있지 않은 경우 "eclipse 마켓플레이스"에서 사용할 수 있습니다.
메모 | 이전 버전의 m2e는 Maven 3.3을 지원하지 않으므로 프로젝트를 Eclipse로 가져온 후에는 프로젝트에 적합한 프로필을 사용하도록 m2eclipse에 지시해야 합니다. 프로젝트의 POM과 관련된 다양한 오류가 표시되면 최신 설치가 있는지 확인하세요. m2e를 업그레이드할 수 없다면 settings.xml 에 "spring" 프로필을 추가하세요. 또는 상위 pom의 "spring" 프로필에서 저장소 설정을 settings.xml 로 복사할 수 있습니다. |
m2eclipse를 사용하지 않으려면 다음 명령을 사용하여 Eclipse 프로젝트 메타데이터를 생성할 수 있습니다.
$ ./mvnw 이클립스:이클립스
생성된 Eclipse 프로젝트는 file
메뉴에서 import existing projects
선택하여 가져올 수 있습니다.
"잘못된 키 크기"로 인해 예외가 발생하고 Sun의 JDK를 사용하는 경우 JCE(Java Cryptography Extension) Unlimited Strength Jurisdiction Policy Files를 설치해야 합니다. 자세한 내용은 다음 링크를 참조하세요.
자바 6 JCE
자바 7 JCE
자바 8 JCE
사용하는 JRE/JDK x64/x86 버전에 관계없이 JCE 파일을 JDK/jre/lib/security
폴더에 추출합니다.
Spring Cloud는 제한이 없는 Apache 2.0 라이센스에 따라 출시되었으며 문제에 대해 Github 추적기를 사용하고 풀 요청을 기본으로 병합하는 매우 표준적인 Github 개발 프로세스를 따릅니다. 사소한 일이라도 기여하고 싶다면 주저하지 말고 아래 지침을 따르십시오.
중요한 패치나 풀 요청을 수락하기 전에 기여자 라이센스 계약에 서명해야 합니다. 기여자의 동의서에 서명한다고 해서 어느 누구에게도 기본 저장소에 대한 커밋 권한이 부여되는 것은 아니지만, 이는 우리가 귀하의 기여를 수락할 수 있다는 것을 의미하며, 그렇게 하면 귀하는 작성자 크레딧을 받게 됩니다. 활동적인 기여자는 핵심 팀에 합류하라는 요청을 받고 풀 요청을 병합할 수 있는 능력을 부여받을 수 있습니다.
이 프로젝트는 기여자 규약 행동 강령을 준수합니다. 참여함으로써 귀하는 이 코드를 유지해야 합니다. 용납할 수 없는 행동을 [email protected]로 신고해 주세요.
이 중 끌어오기 요청에 필수적인 것은 아니지만 모두 도움이 될 것입니다. 원래 풀 요청 이후, 병합 전에 추가할 수도 있습니다.
Spring Framework 코드 형식 규칙을 사용하세요. Eclipse를 사용하는 경우 Spring Cloud Build 프로젝트에서 eclipse-code-formatter.xml
파일을 사용하여 포맷터 설정을 가져올 수 있습니다. IntelliJ를 사용하는 경우 Eclipse Code Formatter 플러그인을 사용하여 동일한 파일을 가져올 수 있습니다.
모든 새 .java
파일에 최소한 사용자를 식별하는 @author
태그가 포함된 간단한 Javadoc 클래스 주석이 있는지 확인하고 클래스의 용도에 대한 단락이 있는 것이 좋습니다.
모든 새 .java
파일에 ASF 라이센스 헤더 주석을 추가합니다(프로젝트의 기존 파일에서 복사).
실질적으로 수정하는(외관적인 변경 이상) .java 파일에 자신을 @author
로 추가하세요.
일부 Javadoc을 추가하고 네임스페이스를 변경하는 경우 일부 XSD 문서 요소를 추가합니다.
몇 가지 단위 테스트도 많은 도움이 될 것입니다. 누군가는 그것을 해야 합니다.
다른 사람이 귀하의 브랜치를 사용하지 않는 경우 현재 기본(또는 기본 프로젝트의 다른 대상 브랜치)을 기준으로 리베이스하십시오.
커밋 메시지를 작성할 때 다음 규칙을 따르십시오. 기존 문제를 수정하는 경우 커밋 메시지 끝에 Fixes gh-XXXX
추가하세요(여기서 XXXX는 문제 번호).
Spring Cloud Build에는 일련의 체크스타일 규칙이 함께 제공됩니다. spring-cloud-build-tools
모듈에서 찾을 수 있습니다. 모듈에서 가장 주목할만한 파일은 다음과 같습니다.
└── 소스 ├── 체크스타일 │ └── checkstyle-suppressions.xml (3) └── 메인 └── 자원 ├── checkstyle-header.txt (2) └── checkstyle.xml (1)
기본 체크스타일 규칙
파일 헤더 설정
기본 억제 규칙
체크스타일 규칙은 기본적으로 비활성화 되어 있습니다. 프로젝트에 체크스타일을 추가하려면 다음 속성과 플러그인을 정의하세요.
<속성> <maven-checkstyle-plugin.failsOnError>true</maven-checkstyle-plugin.failsOnError> (1) <maven-checkstyle-plugin.failsOnViolation>참 </maven-checkstyle-plugin.failsOnViolation> (2) <maven-checkstyle-plugin.includeTestSourceDirectory>참 </maven-checkstyle-plugin.includeTestSourceDirectory> (3) </속성> <빌드> <플러그인> <플러그인> (4) <groupId>io.spring.javaformat</groupId> <artifactId>spring-javaformat-maven-plugin</artifactId> </플러그인> <플러그인> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-플러그인</artifactId> </플러그인> </플러그인> <보고> <플러그인> <플러그인> (5) <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-checkstyle-플러그인</artifactId> </플러그인> </플러그인> </보고> </build>
Checkstyle 오류로 인해 빌드가 실패합니다.
Checkstyle 위반으로 인해 빌드가 실패합니다.
Checkstyle은 테스트 소스도 분석합니다.
대부분의 Checkstyle 형식 지정 규칙을 통과하도록 코드 형식을 다시 지정하는 Spring Java 형식 플러그인을 추가하세요.
빌드 및 보고 단계에 체크스타일 플러그인 추가
일부 규칙을 억제해야 하는 경우(예: 행 길이가 더 길어야 함) ${project.root}/src/checkstyle/checkstyle-suppressions.xml
아래에 억제와 함께 파일을 정의하는 것으로 충분합니다. 예:
<?xml 버전="1.0"?> <!DOCTYPE 억제 PUBLIC "-//Puppy Crawl//DTD 억제 1.1//EN" "https://www.puppycrawl.com/dtds/suppressions_1_1.dtd"> <억제> <suppress files=".*ConfigServerApplication.java" checks="HideUtilityClassConstructor"/> <suppress files=".*ConfigClientWatch.java" checks="LineLengthCheck"/> </억제>
${spring-cloud-build.rootFolder}/.editorconfig
및 ${spring-cloud-build.rootFolder}/.springformat
프로젝트에 복사하는 것이 좋습니다. 이렇게 하면 일부 기본 서식 규칙이 적용됩니다. 다음 스크립트를 실행하면 됩니다.
$ curl https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/.editorconfig -o .editorconfig
$ touch .springformat
Intellij를 설정하려면 코딩 규칙, 검사 프로필을 가져오고 체크스타일 플러그인을 설정해야 합니다. Spring Cloud Build 프로젝트에서 다음 파일을 찾을 수 있습니다.
└── 소스 ├── 체크스타일 │ └── checkstyle-suppressions.xml (3) └── 메인 └── 자원 ├── checkstyle-header.txt (2) ├── checkstyle.xml (1) └── 인텔리즈 ├── Intellij_Project_Defaults.xml (4) └── Intellij_Spring_Boot_Java_Conventions.xml (5)
기본 체크스타일 규칙
파일 헤더 설정
기본 억제 규칙
대부분의 Checkstyle 규칙을 적용하는 Intellij의 프로젝트 기본값
대부분의 Checkstyle 규칙을 적용하는 Intellij의 프로젝트 스타일 규칙
File
→ Settings
→ Editor
→ Code style
로 이동합니다. Scheme
섹션 옆에 있는 아이콘을 클릭합니다. 거기서 Import Scheme
값을 클릭하고 Intellij IDEA code style XML
옵션을 선택하세요. spring-cloud-build-tools/src/main/resources/intellij/Intellij_Spring_Boot_Java_Conventions.xml
파일을 가져옵니다.
File
→ Settings
→ Editor
→ Inspections
로 이동합니다. Profile
섹션 옆에 있는 아이콘을 클릭합니다. 거기서 Import Profile
을 클릭하고 spring-cloud-build-tools/src/main/resources/intellij/Intellij_Project_Defaults.xml
파일을 가져옵니다.
Intellij가 Checkstyle과 함께 작동하도록 하려면 Checkstyle
플러그인을 설치해야 합니다. JUnit 어설션을 자동으로 변환하려면 Assertions2Assertj
도 설치하는 것이 좋습니다.
File
→ Settings
→ Other settings
→ Checkstyle
로 이동합니다. Configuration file
섹션에서 +
아이콘을 클릭합니다. 여기에서 체크스타일 규칙을 선택할 위치를 정의해야 합니다. 위 이미지에서는 복제된 Spring Cloud Build 저장소에서 규칙을 선택했습니다. 그러나 Spring Cloud Build의 GitHub 저장소(예: checkstyle.xml
의 경우: https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
)를 가리킬 수 있습니다. https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle.xml
). 다음 변수를 제공해야 합니다.
checkstyle.header.file
- 복제된 저장소에 있거나 https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
를 통해 Spring Cloud Build의 spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
파일을 가리키도록 하십시오. https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/main/resources/checkstyle-header.txt
URL.
checkstyle.suppressions.file
- 기본 억제. 복제된 저장소에 있거나 https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
을 통해 Spring Cloud Build의 spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
파일을 가리키도록 하십시오. https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/main/spring-cloud-build-tools/src/checkstyle/checkstyle-suppressions.xml
URL.
checkstyle.additional.suppressions.file
- 이 변수는 로컬 프로젝트의 억제에 해당합니다. 예를 들어 spring-cloud-contract
작업 중입니다. 그런 다음 project-root/src/checkstyle/checkstyle-suppressions.xml
폴더를 가리킵니다. spring-cloud-contract
의 예는 /home/username/spring-cloud-contract/src/checkstyle/checkstyle-suppressions.xml
입니다.
중요한 | 프로덕션 및 테스트 소스에 체크스타일 규칙을 적용하므로 Scan Scope All sources 로 설정하는 것을 잊지 마세요. |
Spring Cloud Build는 java 클래스 경로에서 중복되고 충돌하는 클래스와 리소스에 플래그를 지정할 수 있는 basepom:duplicate-finder-maven-plugin
제공합니다.
Duplicate finder는 기본적으로 활성화되어 Maven 빌드의 verify
단계에서 실행되지만 프로젝트 pom.xml
의 build
섹션에 duplicate-finder-maven-plugin
추가하는 경우에만 프로젝트에 적용됩니다.
< build >
< plugins >
< plugin >
< groupId >org.basepom.maven</ groupId >
< artifactId >duplicate-finder-maven-plugin</ artifactId >
</ plugin >
</ plugins >
</ build >
다른 속성의 경우 플러그인 설명서에 나열된 대로 기본값을 설정했습니다.
쉽게 재정의할 수 있지만 duplicate-finder-maven-plugin
접두사가 붙은 선택한 속성의 값을 설정하면 됩니다. 예를 들어, 빌드에서 중복 검사를 건너뛰려면 duplicate-finder-maven-plugin.skip
true
로 설정하세요.
ignoredClassPatterns
또는 ignoredResourcePatterns
설정에 추가해야 하는 경우 프로젝트의 플러그인 구성 섹션에 추가해야 합니다.
< build >
< plugins >
< plugin >
< groupId >org.basepom.maven</ groupId >
< artifactId >duplicate-finder-maven-plugin</ artifactId >
< configuration >
< ignoredClassPatterns >
< ignoredClassPattern >org.joda.time.base.BaseDateTime</ ignoredClassPattern >
< ignoredClassPattern >.*module-info</ ignoredClassPattern >
</ ignoredClassPatterns >
< ignoredResourcePatterns >
< ignoredResourcePattern >changelog.txt</ ignoredResourcePattern >
</ ignoredResourcePatterns >
</ configuration >
</ plugin >
</ plugins >
</ build >