programing

빈에 이미 @ConfigurationProperties 주석이 붙어 있는 경우 @EnableConfigurationProperties는 어떤 차이가 있습니까?

linuxpc 2023. 4. 6. 21:10
반응형

빈에 이미 @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-prefixSomePrefix릴랙스 바인딩에 대한 봄의 지원 때문입니다.

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

반응형