스프링 부트 #10. 부록 B : 구성 메타 데이터
부록 B : 구성 메타 데이터
Spring Boot jar에는 지원되는 모든 구성 속성에 대한 세부 정보를 제공하는 메타 데이터 파일이 포함되어 있습니다. 이 파일은 IDE 개발자가 사용자가 작업 application.properties
하거나 application.yml
파일을 작업 할 때 상황에 맞는 도움말과 "코드 완성"을 제공 할 수 있도록 설계되었습니다 .
메타 데이터 파일의 대부분은에 주석이 달린 모든 항목을 처리하여 컴파일 타임에 자동으로 생성됩니다 @ConfigurationProperties
. 그러나 코너 사례 나 고급 사용 사례 에 대해서는 메타 데이터의 일부를 수동으로 작성할 수 있습니다.
10.B.1. 메타 데이터 형식
구성 메타 데이터 파일은의 jar 안에 있습니다 META-INF/spring-configuration-metadata.json
. 다음 예제와 같이 "그룹"또는 "속성"으로 분류 된 항목과 "힌트"로 분류 된 추가 값 힌트와 함께 간단한 JSON 형식을 사용합니다.
{"groups": [
{
"name": "server",
"type": "org.springframework.boot.autoconfigure.web.ServerProperties",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
},
{
"name": "spring.jpa.hibernate",
"type": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate",
"sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties",
"sourceMethod": "getHibernate()"
}
...
],"properties": [
{
"name": "server.port",
"type": "java.lang.Integer",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
},
{
"name": "server.address",
"type": "java.net.InetAddress",
"sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
},
{
"name": "spring.jpa.hibernate.ddl-auto",
"type": "java.lang.String",
"description": "DDL mode. This is actually a shortcut for the \"hibernate.hbm2ddl.auto\" property.",
"sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate"
}
...
],"hints": [
{
"name": "spring.jpa.hibernate.ddl-auto",
"values": [
{
"value": "none",
"description": "Disable DDL handling."
},
{
"value": "validate",
"description": "Validate the schema, make no changes to the database."
},
{
"value": "update",
"description": "Update the schema if necessary."
},
{
"value": "create",
"description": "Create the schema and destroy previous data."
},
{
"value": "create-drop",
"description": "Create and then destroy the schema at the end of the session."
}
]
}
]}
각“속성”은 사용자가 지정된 값으로 지정하는 구성 항목입니다. 예를 들어, server.port
과 server.address
에 지정 될 수있는 application.properties
다음과 같은 :
server.port=9090
server.address=127.0.0.1
"그룹"은 자체적으로 값을 지정하지 않고 대신 속성에 대한 컨텍스트 그룹을 제공하는 상위 레벨 항목입니다. 예를 들어 server.port
및 server.address
속성은 server
그룹의 일부입니다 .
모든“재산”이“그룹”을 가질 필요는 없습니다. 일부 속성은 자체적으로 존재할 수 있습니다. |
마지막으로 "힌트"는 사용자가 지정된 속성을 구성하는 데 도움이되는 추가 정보입니다. 개발자가 구성 될 때 예를 들어, spring.jpa.hibernate.ddl-auto
속성을 도구는 몇 가지 자동 완성 도움을 제공하기 위해 힌트를 사용할 수 있습니다 none
, validate
, update
, create
, 및 create-drop
값을.
그룹 속성
groups
배열에 포함 된 JSON 객체 는 다음 표에 표시된 속성을 포함 할 수 있습니다.
이름 | 유형 | 목적 |
---|---|---|
|
끈 |
그룹의 전체 이름 이 속성은 필수입니다. |
|
끈 |
그룹 데이터 유형의 클래스 이름입니다. 예를 들어 그룹이로 주석이 달린 클래스를 기반으로하는 |
|
끈 |
사용자에게 표시 할 수있는 그룹에 대한 간단한 설명입니다. 설명이 없으면 생략 할 수 있습니다. 설명은 짧은 단락으로 작성하고 첫 번째 행은 간결한 요약을 제공하는 것이 좋습니다. 설명의 마지막 줄은 마침표 ( |
|
끈 |
이 그룹에 기여한 소스의 클래스 이름입니다. 예를 들어 그룹이로 |
|
끈 |
이 그룹에 기여한 메소드의 전체 이름 (괄호 및 인수 유형 포함) (예 : |
속성 속성
properties
배열에 포함 된 JSON 객체 는 다음 표에 설명 된 속성을 포함 할 수 있습니다.
이름 | 유형 | 목적 |
---|---|---|
|
끈 |
속성의 전체 이름 이름은 소문자로 구분 된 형식입니다 (예 |
|
끈 |
(예,의 속성의 데이터 유형의 전체 서명 |
|
끈 |
사용자에게 표시 할 수있는 속성에 대한 간단한 설명입니다. 설명이 없으면 생략 할 수 있습니다. 설명은 짧은 단락으로 작성하고 첫 번째 행은 간결한 요약을 제공하는 것이 좋습니다. 설명의 마지막 줄은 마침표 ( |
|
끈 |
이 속성을 제공 한 소스의 클래스 이름입니다. 예를 들어 속성이로 주석 |
|
목적 |
특성이 지정되지 않은 경우 사용되는 기본값입니다. 속성 유형이 배열 인 경우 값 배열 일 수 있습니다. 기본값을 알 수없는 경우 생략 할 수 있습니다. |
|
천칭 |
특성이 더 이상 사용되지 않는지 지정하십시오. 해당 필드가 더 이상 사용되지 않거나 해당 정보를 알 수없는 경우 생략 할 수 있습니다. 다음 표는 |
deprecation
각 properties
요소 의 속성에 포함 된 JSON 객체 는 다음 속성을 포함 할 수 있습니다.
이름 | 유형 | 목적 |
---|---|---|
|
끈 |
지원 중단 수준 |
|
끈 |
속성이 더 이상 사용되지 않는 이유에 대한 간단한 설명입니다. 사용 가능한 이유가없는 경우 생략 할 수 있습니다. 설명은 짧은 단락으로 작성하고 첫 번째 행은 간결한 요약을 제공하는 것이 좋습니다. 설명의 마지막 줄은 마침표 ( |
|
끈 |
사용되지 않는이 속성을 대체 하는 속성의 전체 이름입니다 . 이 속성을 대체하지 않으면 생략해도됩니다. |
Spring Boot 1.3 이전 deprecated 에는 deprecation 요소 대신 단일 부울 속성을 사용할 수 있습니다 . 이것은 더 이상 사용되지 않는 방식으로 지원되며 더 이상 사용해서는 안됩니다. 사용 가능한 이유와 교체가없는 경우 빈 deprecation 개체를 설정해야합니다. |
@DeprecatedConfigurationProperty
더 이상 사용되지 않는 속성을 노출시키는 게터에 주석을 추가하여 코드에서 사용 중단을 선언적으로 지정할 수도 있습니다 . 예를 들어, app.acme.target
속성이 혼란스럽고 이름이 바뀐 것으로 가정합니다 app.acme.name
. 다음 예제는 해당 상황을 처리하는 방법을 보여줍니다.
@ConfigurationProperties("app.acme")
public class AcmeProperties {
private String name;
public String getName() { ... }
public void setName(String name) { ... }
@DeprecatedConfigurationProperty(replacement = "app.acme.name")
@Deprecated
public String getTarget() {
return getName();
}
@Deprecated
public void setTarget(String target) {
setName(target);
}
}
를 설정할 수있는 방법이 없습니다 level . warning 코드는 여전히 속성을 처리하므로 항상 가정됩니다. |
앞의 코드는 더 이상 사용되지 않는 속성이 여전히 작동하는지 확인합니다 ( name
장면 뒤의 속성으로 위임 ). 한때 getTarget
및 setTarget
방법이 공개 API에서 제거 할 수 있습니다, 메타 데이터의 자동 중단 힌트도 사라집니다. 힌트를 유지하려면 error
사용 중단 수준으로 수동 메타 데이터를 추가 하면 해당 속성에 대한 정보를 사용자에게 계속 알릴 수 있습니다. 그렇게하면 a replacement
가 제공 될 때 특히 유용합니다 .
힌트 속성
hints
배열에 포함 된 JSON 객체 는 다음 표에 표시된 속성을 포함 할 수 있습니다.
이름 | 유형 | 목적 |
---|---|---|
|
끈 |
이 힌트가 참조하는 속성의 전체 이름입니다. 이름은 소문자로 구분 된 형식 (예 :) |
|
ValueHint [] |
|
|
ValueProvider [] |
|
values
각 hint
요소 의 속성에 포함 된 JSON 객체 는 다음 표에 설명 된 속성을 포함 할 수 있습니다.
이름 | 유형 | 목적 |
---|---|---|
|
목적 |
힌트가 참조하는 요소의 유효한 값입니다. 속성 유형이 배열이면 값 배열 일 수도 있습니다. 이 속성은 필수입니다. |
|
끈 |
사용자에게 표시 할 수있는 값에 대한 간단한 설명입니다. 설명이 없으면 생략 할 수 있습니다. 설명은 짧은 단락으로 작성하고 첫 번째 행은 간결한 요약을 제공하는 것이 좋습니다. 설명의 마지막 줄은 마침표 ( |
providers
각 hint
요소 의 속성에 포함 된 JSON 객체 는 다음 표에 설명 된 속성을 포함 할 수 있습니다.
이름 | 유형 | 목적 |
---|---|---|
|
끈 |
힌트가 참조하는 요소에 대한 추가 컨텐츠 지원을 제공하는 데 사용할 제공자의 이름입니다. |
|
JSON 객체 |
제공자가 지원하는 추가 매개 변수 (자세한 내용은 제공자의 문서를 확인하십시오). |
반복 메타 데이터 항목
“속성”과“그룹”이름이 동일한 개체는 메타 데이터 파일 내에서 여러 번 나타날 수 있습니다. 예를 들어 두 개의 개별 클래스를 동일한 접두사에 바인딩 할 수 있으며 각 클래스에는 잠재적으로 겹치는 속성 이름이 있습니다. 메타 데이터에 동일한 이름이 여러 번 나타나는 것은 일반적이지 않지만 메타 데이터 소비자는 메타 데이터를 지원하도록주의를 기울여야합니다.
10.B.2. 수동 힌트 제공
사용자 환경을 개선하고 사용자가 지정된 속성을 구성하는 데 도움을주기 위해 다음과 같은 추가 메타 데이터를 제공 할 수 있습니다.
- 속성의 잠재적 값 목록을 설명합니다.
- 도구가 프로젝트 컨텍스트를 기반으로 잠재적 인 값 목록을 발견 할 수 있도록 잘 정의 된 의미를 특성에 첨부하도록 제공자를 연관시킵니다.
가치 힌트
name
각 힌트 의 속성은 속성을 나타냅니다 name
. 에서 이전 같이 초기 예를 들어 , 우리는 다섯 개 값을 제공 spring.jpa.hibernate.ddl-auto
재산 : none
, validate
, update
, create
,와 create-drop
. 각 값에는 설명이있을 수 있습니다.
속성이 유형 Map
인 경우 키와 값 모두에 대한 힌트를 제공 할 수 있습니다 (단, 맵 자체는 아님). 특수 .keys
및 .values
접미사는 각각 키와 값을 참조해야합니다.
다음 예제와 같이 sample.contexts
매직 String
값을 정수에 매핑 한다고 가정합니다 .
@ConfigurationProperties("sample")
public class SampleProperties {
private Map<String,Integer> contexts;
// getters and setters
}
매직 값은 (이 예제에서) sample1
및 sample2
입니다. 키에 대한 추가 컨텐츠 지원을 제공하기 위해 모듈의 수동 메타 데이터에 다음 JSON을 추가 할 수 있습니다 .
{"hints": [
{
"name": "sample.contexts.keys",
"values": [
{
"value": "sample1"
},
{
"value": "sample2"
}
]
}
]}
Enum 대신이 두 값에 대해 를 사용하는 것이 좋습니다 . IDE에서 지원하는 경우, 이는 자동 완성에 대한 가장 효과적인 접근법입니다. |
가치 제공자
공급자는 시맨틱을 속성에 첨부 할 수있는 강력한 방법입니다. 이 섹션에서는 자신의 힌트에 사용할 수있는 공식 공급자를 정의합니다. 그러나 선호하는 IDE는 이들 중 일부를 구현하거나 구현하지 않을 수 있습니다. 또한 결국 자체적으로 제공 할 수도 있습니다.
이것은 새로운 기능이므로 IDE 공급 업체는 작동 방식을 따라야합니다. 입양 시간은 자연스럽게 다릅니다. |
다음 표에는 지원되는 공급자 목록이 요약되어 있습니다.
이름 | 기술 |
---|---|
|
추가 값을 제공 할 수 있습니다. |
|
프로젝트에서 사용 가능한 클래스를 자동 완성합니다. 일반적으로 |
|
필수 |
|
유효한 로거 이름 및 로거 그룹을 자동 완성합니다 . 일반적으로 현재 프로젝트에서 사용 가능한 패키지 및 클래스 이름과 정의 된 그룹을 자동 완성 할 수 있습니다. |
|
현재 프로젝트에서 사용 가능한 Bean 이름을 자동 완성합니다. 일반적으로 |
|
프로젝트에서 사용 가능한 Spring 프로파일 이름을 자동 완성합니다. |
특정 속성에 대해 하나의 공급자 만 활성화 할 수 있지만 모든 방법으로 속성 을 관리 할 수있는 경우 여러 공급자를 지정할 수 있습니다 . IDE는 처리 할 수있는 JSON 섹션의 첫 번째 공급자를 사용해야하므로 가장 강력한 공급자를 먼저 배치해야합니다. 지정된 속성에 대한 공급자가 지원되지 않으면 특별한 콘텐츠 지원도 제공되지 않습니다. |
어떤
특수한 모든 제공자 값을 사용하면 추가 값을 제공 할 수 있습니다. 지원되는 경우 속성 유형을 기반으로 정기적 인 값 유효성 검사를 적용해야합니다.
이 공급자는 일반적으로 값 목록이 있고 추가 값이 여전히 유효한 것으로 간주되는 경우에 사용됩니다.
다음 예제 제공 on
및 off
대한 자동 완성 값으로 system.state
:
{"hints": [
{
"name": "system.state",
"values": [
{
"value": "on"
},
{
"value": "off"
}
],
"providers": [
{
"name": "any"
}
]
}
]}
앞의 예에서 다른 값도 허용됩니다.
클래스 레퍼런스
클래스 참조 프로젝트에서 사용할 수 제공자 자동 완료 클래스. 이 제공자는 다음 매개 변수를 지원합니다.
모수 | 유형 | 기본값 | 기술 |
---|---|---|---|
|
|
none |
선택한 값에 할당 할 수있는 정규화 된 클래스 이름입니다. 일반적으로 비 후보 클래스를 필터링하는 데 사용됩니다. 이 정보는 적절한 상한을 가진 클래스를 노출시켜 유형 자체에 의해 제공 될 수 있습니다. |
|
|
진실 |
구체적인 클래스 만 유효한 후보로 간주할지 여부를 지정하십시오. |
다음 메타 데이터 스 니펫은 사용할 클래스 이름을 server.servlet.jsp.class-name
정의하는 표준 특성에 해당합니다 JspServlet
.
{"hints": [
{
"name": "server.servlet.jsp.class-name",
"providers": [
{
"name": "class-reference",
"parameters": {
"target": "javax.servlet.http.HttpServlet"
}
}
]
}
]}
처리
핸들로 제공 업체는보다 높은 수준의 유형 속성의 유형을 대체 할 수 있습니다. java.lang.String
구성 클래스가 클래스 경로에 없을 수있는 클래스에 의존하지 않기를 원하기 때문에 일반적으로 속성에 유형 이있을 때 발생합니다 . 이 제공자는 다음 매개 변수를 지원합니다.
모수 | 유형 | 기본값 | 기술 |
---|---|---|---|
|
|
none |
특성에 대해 고려할 완전한 유형의 이름입니다. 이 매개 변수는 필수입니다. |
다음과 같은 유형을 사용할 수 있습니다.
- Any
java.lang.Enum
: 속성에 가능한 값을 나열합니다.Enum
IDE가 값을 자동 완성하는 데 추가 힌트가 필요하지 않으므로 유형으로 속성을 정의하는 것이 좋습니다. java.nio.charset.Charset
: 값을 부호화 / 문자 세트의 자동 완성 기능을 지원한다 (예UTF-8
)java.util.Locale
: 로케일의 자동 완성 (예en_US
)org.springframework.util.MimeType
: 콘텐츠 형식 값의 자동 완성 기능 지원 (예text/plain
)org.springframework.core.io.Resource
: 파일 시스템 또는 클래스 경로에 파일을 참조 Spring의 자원 추상화의 자동 완성 기능 지원 (예classpath:/sample.properties
)
여러 값을 제공 할 수있는 경우 IDE 유형에 대해 Collection 또는 배열 유형을 사용 하십시오. |
다음 메타 데이터 스 니펫은 spring.liquibase.change-log
사용할 변경 로그의 경로를 정의하는 표준 특성에 해당합니다. 실제로 내부적으로 사용 org.springframework.core.io.Resource
되지만 Liquibase API에 전달하려면 원래 문자열 값을 유지해야하므로 노출 될 수 없습니다.
{"hints": [
{
"name": "spring.liquibase.change-log",
"providers": [
{
"name": "handle-as",
"parameters": {
"target": "org.springframework.core.io.Resource"
}
}
]
}
]}
로거 이름
로거 이름의 제공자 유효한 로거 이름과 자동 - 완료 로거 그룹을 . 일반적으로 현재 프로젝트에서 사용 가능한 패키지 및 클래스 이름은 자동 완성 될 수 있습니다. 그룹이 사용 가능하고 (기본값) 구성에서 사용자 정의 로거 그룹이 식별되면 자동 완성이 제공되어야합니다. 특정 프레임 워크에는 지원 가능한 추가 매직 로거 이름이있을 수 있습니다.
이 제공자는 다음 매개 변수를 지원합니다.
모수 | 유형 | 기본값 | 기술 |
---|---|---|---|
|
|
|
알려진 그룹을 고려해야하는지 여부를 지정하십시오. |
로거 이름은 임의의 이름이 될 수 있으므로이 공급자는 모든 값을 허용해야하지만 프로젝트의 클래스 경로에서 사용할 수없는 유효한 패키지 및 클래스 이름을 강조 표시 할 수 있습니다.
다음 메타 데이터 스 니펫은 표준 logging.level
속성에 해당 합니다. 키는 로거 이름 이며 값은 표준 로그 수준 또는 모든 사용자 지정 수준에 해당합니다. Spring Boot는 기본적으로 몇 개의 로거 그룹을 정의함에 따라 전용 값 힌트가 추가되었습니다.
{"hints": [
{
"name": "logging.level.keys",
"values": [
{
"value": "root",
"description": "Root logger used to assign the default logging level."
},
{
"value": "sql",
"description": "SQL logging group including Hibernate SQL logger."
},
{
"value": "web",
"description": "Web logging group including codecs."
}
],
"providers": [
{
"name": "logger-name"
}
]
},
{
"name": "logging.level.values",
"values": [
{
"value": "trace"
},
{
"value": "debug"
},
{
"value": "info"
},
{
"value": "warn"
},
{
"value": "error"
},
{
"value": "fatal"
},
{
"value": "off"
}
],
"providers": [
{
"name": "any"
}
]
}
]}
스프링 빈 참조
스프링 빈 참조 제공자는 현재 프로젝트의 구성에 정의 된 콩을 자동-완료됩니다. 이 제공자는 다음 매개 변수를 지원합니다.
모수 | 유형 | 기본값 | 기술 |
---|---|---|---|
|
|
none |
후보에게 지정할 수있는 Bean 클래스의 완전한 이름입니다. 일반적으로 후보가 아닌 Bean을 필터링하는 데 사용됩니다. |
다음 메타 데이터 스 니펫은 사용할 Bean spring.jmx.server
의 이름을 정의하는 표준 특성에 해당합니다 MBeanServer
.
{"hints": [
{
"name": "spring.jmx.server",
"providers": [
{
"name": "spring-bean-reference",
"parameters": {
"target": "javax.management.MBeanServer"
}
}
]
}
]}
바인더가 메타 데이터를 인식하지 못합니다. 해당 힌트를 제공하는 경우 여전히를 사용하여 Bean 이름을 실제 Bean 참조로 변환해야합니다 ApplicationContext . |
스프링 프로파일 이름
스프링 프로파일 이름 제공자 자동 완료 현재 프로젝트의 구성에 정의 된 봄 프로파일.
다음 메타 데이터 스 니펫 spring.profiles.active
은 사용할 스프링 프로파일의 이름을 정의 하는 표준 특성에 해당합니다.
{"hints": [
{
"name": "spring.profiles.active",
"providers": [
{
"name": "spring-profile-name"
}
]
}
]}
10.B.3. 어노테이션 프로세서를 사용하여 고유 한 메타 데이터 생성
jar @ConfigurationProperties
를 사용하여 주석이 달린 항목에서 자체 구성 메타 데이터 파일을 쉽게 생성 할 수 있습니다 spring-boot-configuration-processor
. 이 jar에는 프로젝트가 컴파일 될 때 호출되는 Java 주석 프로세서가 포함되어 있습니다. 프로세서를 사용하려면에 대한 종속성을 포함하십시오 spring-boot-configuration-processor
.
Maven을 사용하면 다음 예제와 같이 종속성을 선택적으로 선언해야합니다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
Gradle 4.5 및 이전 버전에서는 compileOnly
다음 예제와 같이 구성 에서 종속성을 선언해야합니다 .
dependencies {
compileOnly "org.springframework.boot:spring-boot-configuration-processor"
}
Gradle 4.6 이상 annotationProcessor
에서는 다음 예제와 같이 구성 에서 종속성을 선언해야합니다 .
dependencies {
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
}
additional-spring-configuration-metadata.json
파일을 사용하는 경우 다음 예제와 같이 작업 compileJava
이 processResources
작업 에 의존하도록 구성되어야합니다 .
compileJava.inputs.files(processResources)
이러한 종속성으로 인해 컴파일 중에 주석 프로세서가 실행될 때 추가 메타 데이터를 사용할 수 있습니다.
프로세서는 주석이 달린 클래스와 메소드를 모두 선택합니다 @ConfigurationProperties
. 구성 클래스 내의 필드 값에 대한 Javadoc은 description
속성 을 채우는 데 사용됩니다 .
@ConfigurationProperties JSON에 추가되기 전에 처리되지 않으므로 Javadoc 필드 와 함께 간단한 텍스트 만 사용해야합니다 . |
클래스에 하나 이상의 매개 변수가있는 단일 생성자가 있으면 생성자 매개 변수 당 하나의 속성이 만들어집니다. 그렇지 않으면, 컬렉션 유형에 대한 특별한 처리 기능이있는 표준 게터 및 세터가 존재하여 속성이 검색됩니다 (게터 만있는 경우에도 감지 됨).
주석 프로세서는 또한의 사용 지원 @Data
, @Getter
그리고 @Setter
롬복 주석을.
주석 처리기가 Enum
s 및 Collections
s 의 기본값을 자동 감지 할 수 없습니다 . 상기의 경우 Collection
또는 Enum
속성이 비어 있지 않은 기본값이, 수동 메타 데이터가 제공되어야한다.
다음 클래스를 고려하십시오.
@ConfigurationProperties(prefix = "acme.messaging")
public class MessagingProperties {
private List<String> addresses = new ArrayList<>(Arrays.asList("a", "b"));
private ContainerType containerType = ContainerType.SIMPLE;
// ... getter and setters
public enum ContainerType {
SIMPLE,
DIRECT
}
}
위 클래스의 속성에 대한 기본값을 문서화하기 위해 다음 내용을 모듈의 수동 메타 데이터에 추가 할 수 있습니다 .
{"properties": [
{
"name": "acme.messaging.addresses",
"defaultValue": ["a", "b"]
},
{
"name": "acme.messaging.container-type",
"defaultValue": "simple"
}
]}
name
수동 메타 데이터가있는 추가 필드를 문서화하려면 속성 중 하나만 필요합니다.
프로젝트에서 AspectJ를 사용하는 경우 주석 프로세서가 한 번만 실행되도록해야합니다. 이를 수행하는 몇 가지 방법이 있습니다. Maven을 사용하면
|
중첩 속성
주석 처리기는 내부 클래스를 중첩 속성으로 자동 간주합니다. 다음 클래스를 고려하십시오.
@ConfigurationProperties(prefix="server")
public class ServerProperties {
private String name;
private Host host;
// ... getter and setters
public static class Host {
private String ip;
private int port;
// ... getter and setters
}
}
앞의 예는 정보에 대한 메타 데이터 생성 server.name
, server.host.ip
및 server.host.port
특성. @NestedConfigurationProperty
필드 의 주석을 사용하여 내부 (비 내부) 클래스가 중첩 된 것처럼 처리되어야 함을 나타낼 수 있습니다.
이러한 유형은 자동으로 식별되고 각각에 대해 단일 메타 데이터 속성이 생성되므로 컬렉션 및 맵에는 영향을 미치지 않습니다. |
추가 메타 데이터 추가
Spring Boot의 구성 파일 처리는 매우 유연하며 @ConfigurationProperties
빈에 바인딩되지 않은 속성이 존재할 수 있습니다 . 기존 키의 일부 속성을 조정해야 할 수도 있습니다. 이러한 경우를 지원하고 사용자 정의 "힌트"를 제공하기 위해 주석 처리기는 항목을 META-INF/additional-spring-configuration-metadata.json
기본 메타 데이터 파일로 자동 병합 합니다.
자동으로 감지 된 특성을 참조하면, 설명, 기본값 및 더 이상 사용되지 않는 정보가 지정된 경우 대체됩니다. 수동 속성 선언이 현재 모듈에서 식별되지 않으면 새 속성으로 추가됩니다.
additional-spring-configuration-metadata.json
파일 의 형식은 일반 형식과 정확히 동일합니다 spring-configuration-metadata.json
. 추가 특성 파일은 선택 사항입니다. 추가 속성이 없으면 파일을 추가하지 마십시오.
Spring Boot Reference DocumentationPhillip Webb, Dave Syer, Josh Long, Stéphane Nicoll, Rob Winch, Andy Wilkinson, Marcel Overdijk, Christian Dupuis, Sébastien Deleuze, Michael Simons, Vedran Pavić, Jay Bryant, Madhura Bhave, Eddú Meléndez, Scott FrederickLegal2.3.1.RELEASE Copyright © 2012-2020 Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically. |