[번역] Spring Boot를 통한 자동 속성 확장
https://www.baeldung.com/spring-boot-auto-property-expansion/ 를 번역함.
1. 개요
이 기사에서는 Maven 및 Gradle 빌드 메소드를 통해 Spring에서 제공하는 속성 확장 메커니즘을 탐색합니다.
2. 메이븐
2.1. 기본 구성
spring-boot-starter-parent 를 사용하는 Maven 프로젝트 의 경우 속성 확장을 사용하기 위해 추가 구성이 필요하지 않습니다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
</parent>
이제 @…@ 자리 표시자를 사용하여 프로젝트 속성을 확장할 수 있습니다 . 다음은 Maven에서 가져온 프로젝트 버전을 속성에 저장하는 방법의 예입니다.
[email protected]@
[email protected]@
다음 패턴과 일치하는 구성 파일 내에서만 이러한 확장을 사용할 수 있습니다.
- **/application*.yml
- **/application*.yaml
- **/application*.properties
2.2. 수동 구성
spring-boot-starter-parent 부모 가 없으면 이 필터링 및 확장을 수동으로 구성해야 합니다. pom.xml 파일 의 < build> 섹션에 resources 요소 를 포함해야 합니다.
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/application*.yml</include>
<include>**/application*.yaml</include>
<include>**/application*.properties</include>
</includes>
</resource>
</resources>
그리고 < 플러그인> 에서 :
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.7</version>
<configuration>
<delimiters>
<delimiter>@</delimiter>
</delimiters>
<useDefaultDelimiters>false</useDefaultDelimiters>
</configuration>
</plugin>
이 유형의 표준 자리 표시자를 사용하는 데 필요한있어 경우에 $ {variable.name을} 우리가 설정해야합니다 useDefaultDelimeters을 에 진실 하고 application.properties은 다음과 같이 표시됩니다
expanded.project.version=${project.version}
expanded.project.property=${custom.property}
3. 그래들
3.1. 표준 Gradle 솔루션
Spring Boot 문서 의 Gradle 솔루션 은 Maven 속성 필터링 및 확장과 100% 호환되지 않습니다.
속성 확장 메커니즘을 사용하려면 다음 코드를 build.gradle 에 포함해야 합니다 .
processResources {
expand(project.properties)
}
이것은 Maven 기본 구성과 다음과 같은 차이점이 있는 제한된 솔루션입니다.
- 점이 있는 속성(예: user.name)을 지원하지 않습니다 . Gradle은 점을 객체 속성 구분 기호로 이해합니다.
- 특정 구성 파일 세트뿐만 아니라 모든 리소스 파일을 필터링합니다.
- 기본 달러 기호 자리 표시자 ${…}를 사용 하므로 표준 Spring 자리 표시자와 충돌합니다.
3.2. 메이븐 호환 솔루션
표준 Maven 솔루션을 복제하고 @…@ 스타일 자리 표시자를 사용하려면 build.gradle에 다음 코드를 추가해야 합니다 .
import org.apache.tools.ant.filters.ReplaceTokens
processResources {
with copySpec {
from 'src/main/resources'
include '**/application*.yml'
include '**/application*.yaml'
include '**/application*.properties'
project.properties.findAll().each {
prop ->
if (prop.value != null) {
filter(ReplaceTokens, tokens: [ (prop.key): prop.value])
filter(ReplaceTokens, tokens: [ ('project.' + prop.key): prop.value])
}
}
}
}
그러면 모든 프로젝트 속성이 해결됩니다. 여전히 build.gradle 에서 점(예: user.name)이 있는 속성을 정의 할 수 없지만 이제 gradle.properties 파일을 사용하여 표준 Java 속성 형식으로 속성을 정의 할 수 있으며 점이 있는 속성(예: database.url) 도 지원 합니다. ).
이 빌드는 모든 리소스가 아닌 프로젝트 구성 파일만 필터링하며 Maven 솔루션과 100% 호환됩니다.
4. 결론
이 빠른 자습서에서는 Maven 및 Gradle 빌드 방법을 모두 사용하여 Spring Boot 속성을 자동으로 확장하는 방법과 하나에서 다른 방법으로 쉽게 마이그레이션하는 방법을 살펴보았습니다.
전체 소스 예제는 GitHub 에서 찾을 수 있습니다 .