programing

@구성 속성 대 @PropertySource 대 @Value

lastmoon 2023. 6. 26. 21:37
반응형

@구성 속성 대 @PropertySource 대 @Value

스프링/스프링 부츠가 처음입니다.의 키-값 쌍 데이터를 사용합니다.application.properties/application.yml자바 파일로.나는 우리가 사용할 수 있다는 것을 알고 있습니다.@Value모든 POJO 클래스에서 필드의 기본값을 설정합니다.application.properties또는application.yml파일.

Q1) 그런데 왜 다른 두 가지가 필요합니까? @ConfigurationProperties그리고.@PropertySource.

Q2)@ConfigurationProperties그리고.@PropertySource두 가지 모두에서 언급된 외부 데이터를 로드하는 데 사용할 수 있습니다.application.properties또는application.yml파일? 아니면 제한사항?

PS: 저는 인터넷에서 검색을 해봤지만 명확한 답을 얻지 못했습니다.

@ConfigurationPropertiesPOJO 빈에서 필드 또는 세터에 속성을 매핑하는 데 사용됩니다.그런 다음 빈을 사용하여 응용 프로그램 로직의 속성 값에 액세스할 수 있습니다.

@PropertySource속성 파일을 참조하여 Spring 환경에 로드합니다(@ConfigurationProperties 또는 @Value에서 사용할 수 있음).

@Value특정 속성 값을 키로 변수(구성원 필드 또는 생성자 인수)에 주입하는 것입니다.

@Value("${spring.application.name}")@application.properties/yml 파일에 일치하는 키가 없으면 값이 예외를 던집니다.자산 가치를 엄격하게 주입합니다.

예:@Value("${spring.application.namee}")예외 아래로 던집니다.namee속성 파일에 필드가 없습니다.

application.properties file
----------------------
spring:
  application:
    name: myapplicationname


org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'testValue': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.namee' in value "${spring.application.namee}"

Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'spring.application.namea' in value "${spring.application.namee}"

@ConfigurationProperties(prefix = "myserver.allvalues")POJO 속성을 주입합니다. 엄격하지 않습니다. 속성 파일에 키가 없으면 속성을 무시합니다.

예:

@ConfigurationProperties(prefix = "myserver.allvalues")
public class TestConfigurationProperties {
    private String value;
    private String valuenotexists; // This field doesn't exists in properties file
                                   // it doesn't throw error. It gets default value as null
}

application.properties file
----------------------
myserver:
  allvalues:
    value:  sampleValue

나의 연구와 이해를 바탕으로:

  • @ConfigurationProperties

    속성 로드application.properties

    의 속성 이름에 해당하는 필드 이름을 지정합니다.application.properties

    --@ConfigurationProperties에서 작동하지 않음@Value

  • @PropertySource

    지정한 파일에서 속성 로드

    와 함께 사용할 수 있습니다.@Value또는@Autowired Environment env;

  • @Value

    와 함께 사용됩니다.application.properties

    application.properties기본적으로 로드됩니다(에서 지정할 필요 없음).@PropertySource)


언급

https://mkyong.com/spring-boot/spring-boot-configurationproperties-example/

https://mkyong.com/spring/spring-propertysources-example/

-

SpringApplication은 다음 위치에 있는 application.properties 파일에서 속성을 로드하여 SpringEnvironment에 추가합니다.

https://docs.spring.io/spring-boot/docs/1.5.22.RELEASE/reference/html/boot-features-external-config.html

-

@구성 속성 주석.Spring bean에 배치되면 Spring 환경의 특성에서 해당 bean의 특성을 주입할 수 있음을 지정합니다.

< 봄은 활동 중 >

-

구성 파일을 응용 프로그램 병에 번들로 넣거나 런타임 환경의 파일 시스템에 넣어 Spring Boot 시작 시 로드할 수 있습니다.

Spring Boot은 프로젝트 클래스 경로에서 application.properties 파일을 자동으로 로드합니다.

http://dolszewski.com/spring/spring-boot-application-properties-file/

-

4.1. application.properties: 기본 속성 파일

부팅은 속성 파일에 구성 방식에 대한 일반적인 규칙을 적용합니다.즉, src/main/resources 디렉토리에 application.properties 파일을 저장하기만 하면 자동으로 검색됩니다.그런 다음 로드된 속성을 정상적으로 주입할 수 있습니다.

따라서 이 기본 파일을 사용하면 PropertySource를 명시적으로 등록하거나 Property 파일의 경로를 제공할 필요가 없습니다.

https://www.baeldung.com/properties-with-spring

-

@ConfigurationProperties는 이름을 기준으로 Java 필드를 일부 일치하는 속성에 바인딩해야 함을 스프링으로 나타냅니다.

스프링은 이 주석이 있는 클래스가 스프링 빈이어야 합니다.

@ConfigurationProperties 및 @Value를 사용한 스프링 주입 값

언급URL : https://stackoverflow.com/questions/58691325/configurationproperties-vs-propertysource-vs-value

반응형