Recent Posts
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Spring Batch
- 개성국밥
- pytest
- 겨울 부산
- JanusWebRTC
- JanusWebRTCServer
- python
- JanusWebRTCGateway
- JanusGateway
- 깡돼후
- terminal
- VARCHAR (1)
- tolerated
- preemption #
- vfr video
- taint
- PersistenceContext
- 티스토리챌린지
- Value too long for column
- kotlin
- 코루틴 빌더
- 코루틴 컨텍스트
- mp4fpsmod
- PytestPluginManager
- 자원부족
- addhooks
- 헥사고날아키텍처 #육각형아키텍처 #유스케이스
- 오블완
- 달인막창
- table not found
Archives
너와 나의 스토리
설정 파일(*.properties, *.yml)에 있는 값들을 자바 클래스로 바인딩해서 사용하기 - @ConfigurationProperties 본문
개발/Spring Boot
설정 파일(*.properties, *.yml)에 있는 값들을 자바 클래스로 바인딩해서 사용하기 - @ConfigurationProperties
노는게제일좋아! 2023. 7. 29. 17:09반응형
@ConfigurationProperties
- *.properties, *.yml과 같이 외부 속성을 바인딩하고 유효성을 검사할 수 있게 해주는 어노테이션.
- @ConfigurationProperties를 클래스에 추가하면, 해당 클래스는 외부 설정을 담는 용도로 사용되고, 이 설정 클래스를 @Configuration 클래스 내에서 @Bean으로 등록하면 스프링 컨테이너에서 해당 설정을 사용할 수 있다.
- 이 어노테이션을 사용하면 바인딩은 클래스의 setter 메서드를 호출하는 방식으로 수행된다.
- @ConstructorBinding 어노테이션을 추가하면 생성자 주입 방식으로 바인딩이 이루어진다.
- 외부 설정 파일에 정의한 이름대로 바인딩을 해주는데, 여러 표기법에 대해 자동으로 바인딩해준다.
- first_name, firstName, first-name, FIRSTNAME 다 가능
사용 방법
- application.yml에 필요한 데이터 작성
tistory:
name: hororolol
link: https://hororolol.tistory.com/
- 바인딩할 클래스 생성
- @ConfigurationProperties(prefix) 어노테이션으로 외부 설정 값을 바인딩하고, @Configuration 어노테이션을 통해 Spring IoC 컨테이너에게 Spring Bean을 제공
@Configuration
@ConfigurationProperties("tistory")
class TistoryProperties {
lateinit var name: String
lateinit var link: String
}
- 설정된 값 가져오기
- @Configuration을 통해 정의한 bean들을 가져오기 위해서는 다음의 작업이 필요하다.
- @Component, @Service. @Controller 등의 어노테이션을 사용하여 해당클래스를 빈으로 등록
- @Autowired 또는 @Resource 등의 어노테이션을 사용하여 해당 빈을 주입
- @Configuration을 통해 정의한 bean들을 가져오기 위해서는 다음의 작업이 필요하다.
@RestController
class TistoryController {
@Resource
private lateinit var tistoryProperties: TistoryProperties
@GetMapping("")
fun getName(): String {
return tistoryProperties.name
}
}
- 테스트 결과
다른 클래스에서 TistoryProperties를 사용하는 방법
- 새로운 클래스 생성
class TistoryService(private val properties: TistoryProperties) {
fun printProperties() {
println("name: ${properties.name}, link: ${properties.link}")
}
}
- 이 클래스를 빈으로 등록
@Configuration
class TistoryConfiguration(private val tistoryProperties: TistoryProperties) {
@get:Bean
val tistoryService: TistoryService by lazy {
TistoryService(tistoryProperties)
}
}
- TistoryService 호출하기
@RestController
class TistoryController {
@Resource
private lateinit var tistoryService: TistoryService
@GetMapping("")
fun getName(): String {
tistoryService.printProperties()
return ""
}
}
출처
반응형
'개발 > Spring Boot' 카테고리의 다른 글
Spring Boot 버전 업그레이드에 따른 변경 사항 / Spring Cloud, Gradle 등 (0) | 2023.03.29 |
---|---|
[SpringBoot] JPA Converter 적용 / Converter null 처리 (0) | 2023.03.05 |
Spring Quartz Scheduler H2 table 생성 (에러 해결) (0) | 2022.11.30 |
Field 'XX_id' doesn't have a default value: JoinColumn id 생성 문제 해결 (0) | 2022.07.19 |
[SpringBoot] RestTemplate Custom Error Response 받기 / Custom Error Message 확인하기 (0) | 2022.06.07 |
Comments