빈에 이미 @ConfigurationProperties 주석이 붙어 있는 경우 @EnableConfigurationProperties는 어떤 차이가 있습니까?
Spring Boot 매뉴얼에 다음과 같이 기술되어 있습니다.@ConfigurationProperties
주석
또한 등록하는 속성 클래스도 나열해야 합니다.
@EnableConfigurationProperties
다음 예시와 같이 주석을 표시합니다.
그리고 다음 코드를 제공합니다.
@Configuration
@EnableConfigurationProperties(AcmeProperties.class)
public class MyConfiguration {
}
하지만 바로 다음 단락에서는 다음과 같이 말한다.
위의 설정에서는 AcmeProperties의 표준 빈이 작성되어 있는 경우에도 다음 사항을 권장합니다.
@ConfigurationProperties
환경만을 다루며, 특히 컨텍스트에서 다른 콩을 주입하지 않습니다.그렇다고는 해도@EnableConfigurationProperties
주석도 자동으로 프로젝트에 적용되므로 기존 빈에서 주석을 달 수 있습니다.@ConfigurationProperties
에서 설정합니다.Environment
.
그 리스트의 제안@ConfigurationProperties
의 밑에 있는 콩@EnableConfigurationProperties
주석은 필요 없습니다.
그래서 어떤 거야?실험적으로 콩에 주석을 달면@ConfigurationProperties
리스트에 올릴 필요 없이 예상대로 속성을 주입합니다.@EnableConfigurationProperties
하지만, 이 경우, 왜 이 명령어를 가진@ConfigurationProperties
아래의 주석.@EnableConfigurationProperties
설명서에 나와 있는 바와 같이?그게 무슨 차이가 있나요?
M. Deinum이 언급했듯이@EnableConfigurationProperties
다음을 지원하기 위한 것입니다.@ConfigurationProperties
. Java Doc 주석을 보면 다음과 같이 표시됩니다.
Configuration Properties 주석이 달린 빈에 대한 지원을 사용하도록 설정합니다.Configuration Properties bean은 표준 방법(예를 들어 Bean @Bean 메서드 사용)으로 등록하거나 편의상 이 주석에서 직접 지정할 수 있습니다. [ ]
예를 들어, 자신의 정보를 읽고 저장하는 것을 담당하는 클래스가 있다고 가정해 보겠습니다.application.yml
/application.properties
다른 데이터베이스에 연결하기 위해 필요합니다.주석을 붙입니다.@ConfigurationProperties
.
그러면 일반적으로는@Configuration
를 제공하는 주석이 달린 클래스DataSource
@Bean
어플리케이션으로 이동합니다.를 사용할 수 있습니다.@EnableConfigurationProperties
에 링크하다@ConfigurationProperties
데이터 소스를 적절히 클래스화하고 초기화합니다.
다음으로 작은 예를 제시하겠습니다.
application.yml
data-sources:
db1:
url: "jdbc:postgresql://localhost:5432}/db1"
username: test
password: test
db2:
url: "jdbc:postgresql://localhost:5432}/db2"
username: test
password: test
데이터 소스 구성
@ConfigurationProperties
public class DataSourcesConfiguration {
private Map<String, BasicDataSource> dataSources;
public void setDataSources(Map<String, BasicDataSource> dataSources) {
this.dataSources = dataSources;
}
Map<String, BasicDataSource > getDataSources() {
return dataSources;
}
}
Data Source Connection 구성
@Configuration
@EnableConfigurationProperties(DataSourcesConfiguration.class)
public class DatabaseConnectionConfiguration implements Provider<Connection> {
private DataSourcesConfiguration dataSourcesConfiguration;
public DatabaseConnectionConfiguration(DataSourcesConfiguration dataSourcesConfiguration) {
this.dataSourcesConfiguration = dataSourcesConfiguration;
}
@Bean
public DataSource dataSource() {
// Use dataSourcesConfiguration to create application data source. E.g., a AbstractRoutingDataSource..
}
}
이 포스트에 도달하는 데 시간이 걸렸지만 다른 사람들이 혜택을 받을 수 있도록 여기에 추가하고 싶습니다.
@ConfigurationProperties
- 클래스를 외부화된 속성 파일로 바인딩하는 데 사용됩니다.매우 강력하며 설정 엔티티 클래스와 함께 콩 클래스를 분리하기 위해 사용해야 합니다.
@Configuration
- - 스프링빈입니다.
@EnableConfigurationProperties
- 내 를 쉽게 수 " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 。
아래 코드를 보면:
@Configuration @EnableConfigurationProperties @ConfigurationProperties(prefix="ar1") public class ar1Settings { }
@Configuration은 Spring에게 이것을 컨피규레이션클래스로 취급하여 Bean으로 등록하도록 지시합니다.
@EnableConfigurationProperties는 스프링에게 이 클래스를 application.yml/properties 값의 소비자로 취급하도록 지시합니다.
@ConfigurationProperties는 이 클래스가 나타내는 섹션을 Spring에 알려줍니다.
속성 파일의 섹션을 지정할 필요가 없는 경우 @ConfigurationProperties를 생략할 수 있습니다.
@EnableConfigurationProperties
( 입) )EnableConfigurationPropertiesRegistrar
「」의 하게 합니다.@ConfigurationProperties
주석이 달린 콩
@ConfigurationProperties
는 외부 으로, 또는 됩니다. 주석된 빈 구성 클래스 또는 메서드에 적용됩니다.@Bean
:
@ConfigurationProperties(prefix = "some-prefix")
public SomePrefix prefixBean() {
return new SomePrefix();
}
내의 ps: " " " " " " " " " " " " " " " " " " " " " ps: " " " " " " " " ps: " " " " " " " " " " " " " " " " " ps:some-prefix
SomePrefix
릴랙스 바인딩에 대한 봄의 지원 때문입니다.
springboot 2.2 이전 버전에서는 다음 중 하나를 수행할 수 있습니다.
@Configuration
@ConfigurationProperties(prefix = "some-prefix")
public class ConfigProperties {
//...some code
}
또는
@Configuration
@EnableConfigurationProperties(SomeClassToBeBounded.class)
public class ConfigProperties {
와 함께
@ConfigurationProperties(prefix = "some-prefix")
public class SomeClassToBeBounded{
//...some code
}
스프링 부트 2.2부터
훨씬 쉬운 방법으로 할 수 있습니다.
@ConfigurationProperties(prefix = "some-prefix")
@ConfigurationPropertiesScan
public class ConfigProperties {
//...some code
}
이를 통해 @SpringBootApplication에 의해 활성화된 클래스 경로 스캐너는 @Component로 이 클래스에 주석을 달지 않았더라도 ConfigProperties 클래스를 찾습니다.
언급URL : https://stackoverflow.com/questions/49880453/what-difference-does-enableconfigurationproperties-make-if-a-bean-is-already-an
'programing' 카테고리의 다른 글
React에서 화면 크기가 모바일로 변경되었는지 감지하는 방법 (0) | 2023.04.06 |
---|---|
POST: URL 자체에서 POST 요청 전송 (0) | 2023.04.06 |
2D Geo Index를 사용하여 Mongoose 스키마의 배열에서 개체를 올바르게 정의하는 방법 (0) | 2023.04.06 |
ASP를 사용하여 .json 파일을 다운로드하는 방법.그물 (0) | 2023.04.06 |
제네릭을 사용한 타입스크립트 화살표 함수의 구문은 무엇입니까? (0) | 2023.04.06 |