Java & Spring

Spring MVC 프로퍼티 파일 value 가져오기

리차드 2020. 9. 29. 12:35

프로젝트를 진행하며 숨겨야할 정보가 지금까지 2가지 정도 있었다.

첫번째는 db접속정보, 두번째는 메일계정정보였다.

 

db는 XML설정을 활용했기에 가져다 쓰는 게 어려움이 없었다.

1
2
3
4
5
6
7
8
9
10
<context:property-placeholder location="프로퍼티 파일"/>
 
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
  <property name="driverClassName" value="${jdbc.driverClassName}"></property>
  <property name="url" value="${jdbc.url}"></property>
  <property name="username" value="${jdbc.username}"></property>
  <property name="password" value="${jdbc.password}"></property>
  <property name="maxTotal" value="${jdbc.maxTotal}"></property>
  <property name="maxIdle" value="${jdbc.maxIdle}"></property>
</bean>
cs

 

그런데 java 파일에서 가져다 쓰는 건... 

나의 구글력이 부족해서인지 아주 코드가 난잡했다.

1
2
3
4
5
6
7
8
9
10
11
InputStream is = getClass().getResourceAsStream("프로퍼티 파일");
Reader reader = new InputStreamReader(is);
Properties properties = new Properties();
try {
    properties.load(reader);
catch (IOException e) {
    e.printStackTrace();
}
 
this.userName = properties.getProperty("email.account");
this.password = properties.getProperty("email.password");
cs

 

 

일단은 그냥 진행했었는데..

시간이 지나며 프로퍼티 파일에 내용이 추가될 조짐이 보이기 시작했다.

가령 FTP접속 정보가 추가되어야 한다. 그리고 Java에서 사용되어야 했다.

코드가 너무 안 예쁘고 더 편하게 쓸 방법이 있을 것 같아 검색해보니..

Spring 에서 프로퍼티 파일을 사용하는 방법이 대표적으로 3가지가 소개되고 있었다.

 


 

첫번째 방법

내가 기존에 사용했던 방식은 namespace에서 context를 체크하고 아래와 같이 작성해서 사용하는 것이었고,

1
<context:property-placeholder location="프로퍼티 파일"/>
cs

XML파일에선 ${"key"} 의 형식으로  value를 가져올 수 있었지만, java와 JSP에선 불러오는 방법을 찾을 수 없었다.

 


 

두번째 방법

검색 결과가 많은 방법이었다. PropertyPlaceholderConfigurer 빈을 선언하는 방식이다.

1
2
3
4
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <beans:property name="location" value="프로퍼티 파일"/>
  <beans:property name="fileEncoding" value="UTF-8" />
</beans:bean>         
cs

그러나 이 방식은 Deprecated 되어 사용하지 않기로 했다.

 


 

세번째 방법

확장성이 가장 뛰어난 방법으로 생각된다. Java, JSP, XML 모든 곳에서 value를 호출할 수 있다.

namespace 에서 util을 체크한다. 드디어 util을 써먹는구나. 한 줄로 세팅 끝. 여기저기서 호출만 하면 된다.

1
<util:properties id="property" location="프로퍼티 파일" />
cs

 

Java와 XML, JSP에서 호출하는 방식은 각각 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
<!--"#{property['key']}", <spring:eval expression="@property['key']" /> !-->
 
<!-- in XML !-->
<property name="driverClassName" value="#{property['jdbc.driverClassName']}"></property>
 
<!-- in Java !-->
@Value("#{property['key']}")
private String value;
 
<!-- in JSP !-->
<%@ taglib uri="http://www.springframework.org/tags"  prefix="spring"%>
<spring:eval expression="@property['jdbc.user']"/>
cs