[스프링/Spring] properties 읽어오기
properties 읽어오기(3가지)
1) PropertyPlaceholderConfigurer를 이용한 properties 파일 읽어오기
2) context:property-placeholder를 이용한 properties 파일 읽어오기
3) <util:properties/> 와 Spring EL을 이용한 properties 파일 읽어오기
1) PropertyPlaceholderConfigurer를 이용한 properties 파일 읽어오기
프로퍼티를 읽어오기 위해 간단한 선행 작업으로 /WEB-INF안에 config 폴더를 생성 후 안에 config.prpoerties라는 프로퍼티 파일을 생성
config.properties의 내용
#### Oracle DB Info #### db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@localhost:1521:orcl db.username=ktko db.password=ktko1234 #### File Path #### file.path=C:\\
servlet-context.xml
location 프로퍼티의 값에는 콤마나 공백으로구분된 프로퍼티 파일 목록이 오며, 프로퍼티 파일에 포함된 프로퍼티의 값은 '${프로퍼티 이름}' 형식으로 사용할 수 있습니다. 예제를 보면 config.properties 안에 있는 db.driver의 값을 xml 파일에서 '${db.driver}' 형태로 사용할 수 있습니다.
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <beans:property name="location" value="/WEB-INF/config/config.properties"/> <beans:property name="fileEncoding" value="UTF-8" /> </beans:bean>
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <beans:property name="driverClassName" value="${db.driver}"/> <beans:property name="url" value="${db.url}"> <beans:property name="username" value="${db.username}"/> <beans:property name="password" value="${db.password}"/> </beans:bean>
Java Source
@value 어노테이션 선언으로 값을 가져올 수 있습니다.
@Controller
public class HomeController {
@Value("${file.path}") private String file_Path; @Value("${db.username}") private String dbUser; @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { model.addAttribute("filePath", file_Path); model.addAttribute("dbUser", dbUser); return "home"; } }
JSP Page
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html> <head> <title>Home</title> </head> <body> <h1> Hello world! </h1> <P> FilePath is ${filePath} </P> <P> dbUser is ${dbUser} </P> </body> </html>
실행 결과
한개 이상의 프로퍼티를 읽어오기
이번에는 resources 폴더 안에 config 폴더를 생성하고 위에 생성했던 config.properties의 내용을 config.properties, config2.properties 두개로 나누어 저장하였습니다.
1. config.properties
#### Oracle DB Info #### db.driver=oracle.jdbc.driver.OracleDriver db.url=jdbc:oracle:thin:@localhost:1521:orcl db.username=ktko db.password=ktko1234
2. config2.properties
#### File Path ####
file.path=C:\\
servlet-context.xml
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <beans:property name="locations"> <beans:list> <beans:value>classpath:/config/config.properties</beans:value> <beans:value>classpath:/config/config2.properties</beans:value> </beans:list> </beans:property>
</beans:bean>
<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <beans:property name="driverClassName" value="${db.driver}"/> <beans:property name="url" value="${db.url}"> <beans:property name="username" value="${db.username}"/> <beans:property name="password" value="${db.password}"/> </beans:bean>
실행 결과는 위와 동일합니다.
2) context:property-placeholder를 이용한 properties 파일 읽어오기
먼저 context:property-placeholder을 사용하기 위해서는 servlet-context.xml에서 설정이 필요합니다.
아래 사진처럼 namespace시트에서 context 박스 부분을 체크합니다.
servlet-context.xml
<context:property-placeholder location="classpath:config/*"/> <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <beans:property name="driverClassName" value="${db.driver}"/> <beans:property name="url" value="${db.url}"> <beans:property name="username" value="${db.username}"/> <beans:property name="password" value="${db.password}"/> </beans:bean>
3) <util:properties/> 와 Spring EL을 이용한 properties 파일 읽어오기
먼저 servlet-context.xml의 네임스페이스 시트로 들어가 util 체크박스를 클릭합니다.
servlet-context.xml
읽어드릴 properties id를 정하고, 위치를 입력합니다
<util:properties id="dbinfo" location="classpath:/config/config.properties"/> <util:properties id="fileinfo" location="classpath:/config/config.properties"/>
Java Source
@value 어노테이션 선언으로 값을 가져올 수 있습니다.
${"'#id명'[프로퍼티안에 저장된 값]"}
@Controller public class HomeController { @Value("#{fileinfo['file.path']}") private String file_Path; @Value("#{dbinfo['db.username']}") private String dbUser; @RequestMapping(value = "/", method = RequestMethod.GET) public String home(Locale locale, Model model) { model.addAttribute("filePath", file_Path); model.addAttribute("dbUser", dbUser); return "home"; } }