본문 바로가기

프로그래밍/스프링[Spring]

[Spring] 스프링 SpEL를 이용한 프로퍼티 설정



자 오늘은 property 설정에 다뤄 보겠습니다.

 

property 정의

서버정보나 파일 업로드 경로 같이 중요한 환경정보를 담은 프로퍼티 파일을 따로 만들어 관리하기 용이하게 하기 위해 있는 파일

 

 

property 사용하기

저 같은 경우는 database 연결을 다음과 같이 합니다


datasource-context.xml 파일

<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
  <property name="url" value="jdbc:mysql://localhost:1234/"/>
  <property name="username" value="test"/>
  <property name="password" value="123123"/>
</bean>

 

위의 정보는 예시 정보를 임의로 넣었습니다.

자 이제 프로퍼티를 설정하도록 하겠습니다

설정방법에는 몇개의 방법이 있는데 저는 SpEL방법을 이용하여 하도록

 

(방법을 다 사용해본 결과 이것만 작동 했습니다..)

일단 프로퍼티 파일을 만듭니다.

 

파일은 New-> File

자 그리고 property 정보를 입력합니다

globals.properties파일

# SERVER-LOCAL
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:1234
jdbc.user=admin
jdbc.password=123123
 
# SERVER-REAL
#jdbc.driver=com.mysql.jdbc.Driver
#jdbc.url=jdbc:mysql://localhost:1234
#jdbc.user=admin
#jdbc.password=123123

 

이렇게 기존 로컬서버를 이용할땐 위의 정보를, 실 서버에 반영할때는 주석 해제/ 처리를 각각 적용시켜 주면 됩니다.

 

자 이제 설정 하는 방법에 대해 알아보겠습니다.

servlet-context.xml파일

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="
        http://www.springframework.org/schema/util 
        http://www.springframework.org/schema/util/spring-util-3.1.xsd">
						.
						.
						.
						.
						.
    <!-- Globals Properties -->
    <util:properties id="property" location="/WEB-INF/spring/property/globals.properties" />
</beans:beans>

 

 

자 우선 상단에 위와 같은 내용을 추가만 해주시면 됩니다.

그리고 util을 이용하여 프로퍼티를 설정 합니다.

 

globals.properties파일

<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="#{property['jdbc.driver']}"/>
  <property name="url" value="#{property['jdbc.url']}" />
  <property name="username" value="#{property['jdbc.user']}"/>
  <property name="password" value="#{property['jdbc.password']}"/>
</bean>

 

이렇게 #{해당설정id['프로퍼티 변수']} 로 설정하면 끝입니다.

 

 

자 그리고 자바단에서 사용 하려면 다음과 같이 사용하면 됩니다.

@Value("#{property['jdbc.url']}")
private String dbURL;

 

컨트롤서 상단에 선언하고 변수 처럼 사용하시면 됩니다.

참고사항

스프링에서 프로퍼티 정보를 가져올때 Controller에서는 가져오지만 Class 파일에서는 못가져 오는 경우가 있습니다.

이를 위한 해결방법을 소개해 드리겠습니다.

첫번째 방법은 쉽게 클래스에 매개변수로 보내는 방법이 있습니다.

두번째 방법은 다음과 같습니다.

일단 프로퍼티를 가져오지 못하는 이유는 new를 사용하면서 가져올 수 없습니다.

 

예를 들면

FileUpload fileUpload = new FileUpload();

 

이런식으로 클래스를 사용하실 텐데요 이를 위한 해결방법으로는

 

Controller 상단에 서비스를 등록합니다

@Resource(name ="fileUpload") 
private FileUpload fileUpload;

 

이렇게 서비스로 등록을 하고 사용하시면 프로퍼티를 제대로 가져올 수 있습니다.

감사합니다.