inflearn logo
강의

Course

Instructor

Toby's Spring Boot - Understanding and Principles

DataSource Auto-Configuration Class

binding error

220

pinest

1 asked

0

질문 전 말씀드리면, Kotlin + Spring Boot를 사용하고 있습니다. 

Datasource Connection Test 코드를 작성하고 테스트할 때 application.yml에서 properties 객체로의 binding시 이슈가 있습니다.

정확하게는 prefix가 존재할 때 binding시 String에서 Properties 객체로 binding을 시도하다가 에러가 발생하고 있고, application.properties 해당 문제가 발생하지 않음과 달리 application.yml에서 prefix 존재하는 경우 발생하고 있습니다.

혹시, 강의에서 진행해주셨던 postProcessAfterInitialization의 내부 로직에서 application.yml + prefix 조합에서의 별도 처리가 필요한걸까요?

binding error를 확인하기 위해 작성한 테스트 코드는 아래와 같습니다.

spring spring-boot spring-jdbc

Answer 3

0

tobyilee

일반적으로 properties가 아니고 yml이라고 prefix 관련 문제가 발생하지는 않을텐데요.

정확히 어떤 상황인지 올려주신 코드만으로는 파악하기가 어렵습니다.

실제 에러가 발생하는 코드 전체를 GitHub에 공유해주시면 받아서 한번 확인해보겠습니다. 코드와 함께 어떻게 실행을 할 때 에러가 발생하는지도 알려주세요.

0

pinest

토비님 답변이 늦었습니다 ㅠㅠ
repository & feature/spring-boot-toby branch 입니다. 올려드립니다 (multi-module 로 구성되어있어 불편하실 수도 있습니다 ㅠㅠ)

MyDataSourcePropertiesTest, MyServerPropertiesTest 등 Properties를 binding하는 테스트를 실행했을때 에러가 발생 유무를 통해 확인했습니다. (서버 가동시에도 동일한 에러가 발생합니다.)

0

pinest

추가적으로, 제가 debugging 했을때는 java layer에 해당하는 Properties Class에서의 load부분은 이슈가 없었고 Binder에서 bind할때 context객체를 디버깅하면 prefix 존재시 매핑결과가 달랐어서 yml의 경우 하나의 과정을 springframework layer에서 더 거치는게 아닌가 조심스레 추측하고 있습니다.

확인해보니, @SpringBootTest 에서 yml reader하는 기능도 포함되었군요.

1

pinest

"[DataSource 자동 구성 클래스 테스트] properties와 yml의 차이점 관련 질문입니다." 라는 다른 분의 질문 내용을 통해 원인 파악완료되었습니다! 감사합니다!

0

pinest

myserver:
  context-path: /my-app
  port: 9090

data:
  url: jdbc:h2:mem:
  driver-class-name: org.h2.Driver
  username: sa
  password:

0

pinest

@ExtendWith(SpringExtension::class)
@ContextConfiguration(classes = [SpringBootTobyApplication::class])
@TestPropertySource(locations = ["classpath:application.yml"])
class MyDataSourcePropertiesTest {

    @Autowired
    private lateinit var myDataSourceProperties: MyDataSourceProperties

    @Test
    fun testPropertiesBinding() {

        assertNotNull(myDataSourceProperties)
        assertNotNull(myDataSourceProperties.url)
        assertNotNull(myDataSourceProperties.driverClassName)
    }
}

11강에서 cmd에서 spring shell에 $ init 하면 Fail 메세지

0

75

2

TestRestTemplate 을 통해 테스트 실행시 웹 요청 정보가 콘솔에 표시되지 않습니다.

0

85

1

섹션7. 자동구성 정보파일분리 강의 질문(@MyAutoConfiguration 붙힌 이유)

0

201

2

WebApplicationContext를 DispatcherServlet에 this로 넘기는 것

0

279

2

인프라 빈 구성 정보의 분리에서 EnableMyAutoConfiguration 질문드립니다.

0

210

2

질문드립니다.

0

232

2

spring boot 3.3.7로 학습중입니다.

0

369

2

Serverproperties 객체 생성 후 @Impor 어노테이션 사용 이유 용도

0

162

2

spring start io 에서 이제더이상 2.x버전은 지원하지 않는 것 같습니다.

1

296

2

Springboot 3.2 이상에서 파라미터 추론관련

0

913

4

Arrays.copyOf 메서드의 타입 세이프

1

155

2

MyOnClassCondition에 있는 matches method의 Invoke 횟수

1

233

3

인용구의 출처가 궁금합니다.

0

259

1

프로퍼티 빈의 후처리기 도입 AnnotationUtils의 사용

0

236

2

SimpleCacheConfiguration과 빈 등록

0

168

2

MyAutoConfigImportSelector 에서 생성자로 ClassLoader를 주입받을 수 있는 점

0

244

1

IntelliJ project jenerator spring initailizr

0

150

1

강의 자료 레퍼지토리에 업로드

0

216

1

강의자료

0

388

1

Hikari 라이브러리가 없으면 오류가 나는거 아닌가요

0

314

2

Tomcat 포트 프로퍼티 미설정시 랜덤 포트 설정 문의

0

476

5

@Import 로 Bean을 등록해야하는 기준이 뭔지 궁금합니다.

0

340

2

application.properties파일내 프로퍼티 이름

0

210

1

강의 공부방법

0

282

1