티스토리 뷰
이번에는 Spring 에서 properties파일에 정의된 값들을 JAVA로 가져오는 방법에 대해 얘기해보자.
Spring Boot로 애플리케이션 개발을 해보신분들이라면 application.properties / application.yml /
별도로 만든 propeties파일에 디비접속정보 등 각종 설정값들이 저장되있는걸 많이들 보았을거다.
이런 값들을 가져올때는 여러가지 방법이 있는데 3가지를 소개해보고자 한다.
1. application.properties에서 가져오기
2. 사용자 정의 properties파일에서 가져오기
3. 모든 properteis파일에 정의된 값 가져오기
1. application.properties에서 가져오기
application.properties 파일에 test.key 라는 프로퍼티를 선언했고 value라는 값을 세팅을하였다.
이 값을 JAVA에서 가져오면 @Value 어노테이션을 선언하고 인자값에 "${프로퍼티명}"을 적어주면 해당값을 가져올수 있다.
Test를 해보니 정상적으로 가져올 수 있는 걸 확인했다.
여기서 한가지 호기심이 생겼다.
프로퍼티는 데이터가 키(key)와 값(value) 구조로 되어있는데 키와 값은 1:1 매핑인데 1:N 매핑은 되는지
궁금했다. 그래서 이번엔 하나의 키에 여러개의 값을 넣고 Test를 해보자
아까는 value값 1개를 넣었지만 이번엔 value1 ~ 4 총4개를 넣어보았다.
2. 사용자 정의 properties파일에서 가져오기
이제는 application.properties파일이 아닌 개발자가 직접 프로퍼티파일을 만들고 그 파일에 값을 불러오도록 해보자
우선 맨처음에 프로퍼티파일을 생성해보자.
src/main/resources/com/properties 경로하위에 system.properties 라는 프로퍼티파일을 생성하였고
해당 파일안에는 테스트데이터 4개를 넣어두었다.
그다음 개발자가 직접만든 프로퍼티파일을 스프링이 관리할 수 있도록 설정을 해두자.
등록된 Bean 이름에서 유추할수 있다시피 프로퍼티를 관리해주는 Bean설정이다.
위에서 만든 프로퍼티파일의 경로를 해당 빈이 찾아서 읽어드릴수 있도록 세팅을 하자.
이제 준비는 다 끝났다. Test를 돌려보자 !
Test가 정상적으로 완료되었다. !!
과연 스프링은 어떻게 저 properties 파일을 읽어드린 것일까?
아래의 사진을 한번보자
우리가 해당 Bean을 생성후 system 이라는 name을 설정해주었다 해당 경로에 설정된 프로퍼티 파일을 읽어드린 후
등록된 이름으로 Bean을 생성하겠다는 것이다.
그리고 해당 프로퍼티에 정의된 값을 가져올때 사진1에서 했던방식과는 표현식이 좀 달랐다.
@Value("#{빈네임['프로퍼티명']}") 으로 해당 프로퍼티의 값을 가져올 수 있게된다는걸 어렴풋이 추측된 것 같다(??)
중괄호와 대괄호 사이에 있는 저 표기가 bean 이름이 오는게 맞는건지 system이라고 지정한 name을 지워보자
그러면 해당 메서드 이름이 bean name으로 등록이 되는데 그 메서드이름을 빈네임자리에 한번넣어보고 Test를 해보자.
예상대로 저 자리에는 bean name이 오는게 맞았다.
마지막으로 모든 프로퍼티에 정의된 파일을 불러오는 방법을 알아보자
3. 모든 properteis파일에 정의된 값 가져오기
사진1과 사진2에서 프로퍼티 파일을 JAVA로 가져오는 방법을 소개했다.
근데 만약에 properties 파일이 system, config 등등 여러개가 있으면 프로퍼티를 가져올때 해당Bean네임을 일일이
적어줘야 하는것일까?
스프링은 프로퍼티 파일들을 관리할수 있게끔 공통으로 추상화 해놓은 인터페이스가 정의되어 있는데
Environment 라는 인터페이스이다. 이 인터페이스를 의존주입 받게되면 스프링이 관리하는 모든 프로퍼티의 값을
getProperty(String name) 메서드를 이용해 읽어드릴 수 있다.
Test를 진행해보기전에 system.properties파일을 복사하여 config.properties로 변경하고 설정파일도 그대로 하나 복사해서 추가하자.
그리고 각 프로퍼티 파일에 값을 넣고 Test를 돌려보자 !
스프링으로 애플리케이션 개발을 하면서 많이 사용했던 방법이지만 다시한번 공부한다는 마음으로 정리하고있다.
'Spring' 카테고리의 다른 글
[Spring] - jxls로 간편하게 엑셀다운로드 구현하기 (11) | 2020.12.29 |
---|---|
[Spring] - IoC Container에 관리되는 Bean 목록 확인하기 (0) | 2020.12.20 |
[Spring] - 다중 DataSource구성하기 feat. (@Primary, @Qualifier) (0) | 2020.12.05 |
[Spring] - Spring Boot + Mybatis 연동 후 Test 해보기 (0) | 2020.12.04 |
[Spring] - @Bean, @Configuration, @Component (2) | 2020.12.03 |